栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【无标题】

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【无标题】

Android-自定义Toast 前言

笔者小白,初次写博客,有诸多不足之处,欢迎各位读者指正。
由于参加亚太机器人大赛Robocon2022——同创辉煌,我在参赛团队里负责的是上位机部分,本次上位机我们团队放弃了传统的手柄,改用了手机app做上位机交互控制。前些天大致学了些Java(也真的就只学了些,很多看不完,也看不懂,深感自身编程能力不足)。现在开始学习Android开发,在Android Studio平台学习app开发。

Toast

1.什么是Toast?
我也具体答不上来,只知道在Android开发中,大致和消息提示有关,为此我还查了一下该单词英文含义,如下图(好像没有一个和消息相关的。。。)

2.Toast的使用案例
大致看了一些资料,基本是这么使用的(如下代码)。
第一个参数是上下文(我现在还不知道上下文的含义,但基本看到都是MainActivity.this或getApplicationContext()),并且参考了于连林老师的《爱上Android》,书上说最好用getApplicationContext(),原因:如果在Toast消失之前,Toast持有了当前Activity,而此时如果点击返回键,会导致Activity无法被GC销毁,这个Activity就引起了内存泄露。
第二个参数是想显示的String对象,也就是字符串,这里我传入 “我要学好Android”
第三个参数是传入int类型,一般传入的是Toast.LENGTH_SHORT或Toast.LENGTH_LONG,分别代表不同的显示时长(显示时长一到,消息提示就消失了)

Toast toast = Toast.makeText(getApplicationContext(), "我要学好Android", Toast.LENGTH_SHORT);
toast.show();

而Toast.LENGTH_SHORT和Toast.LENGTH_SHORT实际上就是Toast类里的静态(static)int类型常量,定义如下图

使用案例1
AndroidStudio平台新建好一个Empty Project,如下图

在activity_main.xml里新建一个按钮,因为想实现点击按钮后通过Toast对象显示一条消息
activity_main.xml里的内容如下

接下来编写MainActivity.java
内容比较简单,就是在setOnContentView(R.layout.activity_main)后获取这个按钮,然后设置监听,如下

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    Button btn_1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_1 = findViewById(R.id.btn_1);
        //注意一定要先findViewById,这一步相当于Java里学的实例化对象,否则就是空对象了,空对象设置监听会闪退
        btn_1.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        int id = view.getId();
        if (id == R.id.btn_1){
            Toast toast = Toast.makeText(getApplicationContext(), "我要学好Android", Toast.LENGTH_SHORT);
            toast.show();
        }
    }
}

效果就不展示了(录屏结果我暂时不会转gif。。)

使用案例2
从上面结果来看(好吧,我没贴),虽然第三个参数是Toast.LENGTH_SHORT,但显示时间依然很长,如果多个按钮,每个按钮点击后显示消息不同,那么当用户点击很勤时,消息显示会有滞后,因此需要实现能够设定其显示时长。
实现方法如下:新建一个类,我这里命名为Toast_Customed,然后在该类里写一个static方法,然后MainActivity里的OnClick回调方法里调用这个static方法即可。
Toast_Customed.java内容如下(当然,第一次写,只会使用这种简单的方式,后面学了更好的方式再补充)

public class Toast_Customed {


    public static void ShowShorter(Context context, String word, int delay_ms){

        Toast toast = Toast.makeText(context, word, Toast.LENGTH_SHORT);
        toast.show();
        try {
            Thread.sleep(delay_ms);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        toast.cancel();
    }
}

然后在MainActivity中使用,如下

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    Button btn_1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_1 = findViewById(R.id.btn_1);
        //注意一定要先findViewById,这一步相当于Java里学的实例化对象,否则就是空对象了,空对象设置监听会闪退
        btn_1.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        int id = view.getId();
        if (id == R.id.btn_1){
//            Toast toast = Toast.makeText(getApplicationContext(), "我要学好Android", Toast.LENGTH_SHORT);
//            toast.show();
            Toast_Customed.ShowShorter(getApplicationContext(), "好好学习", 200);
        }
    }
}

效果就不展示了(录屏结果我暂时不会转gif。。),明显显示时间更短了,但有个问题是当我第三个参数delay_ms给太小了,好像不给显示了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1013613.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号