Android Toast(吐司)的基本使用

一、Toast简介

当视图显示给用户,在应用程序中显示为浮动。和Dialog不一样的是,它永远不会获得焦点,无法被点击。用户将可能是在中间键入别的东西。Toast类的思想就是尽可能不引人注意,同时还向用户显示信息,希望他们看到。而且Toast显示的时间有限,Toast会根据用户设置的显示时间后自动消失。
二、Toast的使用

2.1、Toast.makeText(MainActivity.this, “提示的内容”, Toast.LENGTH_LONG).show();

第一个是上下文对象!第二个是显示的内容!第三个是显示的时间,只有LONG和SHORT两种
会生效,即时你定义了其他的值,最后调用的还是这两个!要自己造轮子重写时间

参数名 含义
LENGTH_SHORT 0 toast显示较短的时间后消失(4000ms)
LENGTH_LONG 1 toast显示较长的时间后消失(7000ms)

2.2、改变Toast的位置

void setGravity(int gravity, int xOffset, int yOffset)

三、Toast Daemon

复制代码
package com.gatsby.toast;

import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    Context mContext;
    Button btn1, btn2, btn3, btn4;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mContext = MainActivity.this;
        initView();
    }

    public void initView() {

        btn1 = (Button) findViewById(R.id.btn1);
        btn2 = (Button) findViewById(R.id.btn2);
        btn3 = (Button) findViewById(R.id.btn3);

        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
        btn3.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {

        switch (v.getId()) {
            case R.id.btn1:
                Toast.makeText(MainActivity.this, "Button1 Toast ---> 1", Toast.LENGTH_LONG).show();
                break;
            case R.id.btn2:
                Toast toast = Toast.makeText(mContext, "Button2 Toast ---> 2", Toast.LENGTH_SHORT);
                toast.setGravity(Gravity.TOP, 0, 0);
                toast.show();
                break;
            case R.id.btn3:
                crushToast("Button3 Toast ---> 3", Toast.LENGTH_LONG);
                break;
        }
    }

    public void crushToast(String str, int showTime) {
        Toast toast = Toast.makeText(mContext, str, showTime);
        toast.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM, 0, 0);  //设置显示位置
        TextView v = (TextView) toast.getView().findViewById(android.R.id.message);
        v.setTextColor(Color.YELLOW);     //设置字体颜色
        toast.show();
    }
}
复制代码

 三. Android中的UI是线程不安全的,因此要更新UI必须在主线程中进行。

1
2
3
4
5
6
7
8
9
10
11
07-31 10:31:39.226 E/JavaBinder(  520): *** Uncaught remote exception!  (Exceptions are not yet supported across processes.)
07-31 10:31:39.226 E/JavaBinder(  520): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
07-31 10:31:39.226 E/JavaBinder(  520):         at android.os.Handler.<init>(Handler.java:200)
07-31 10:31:39.226 E/JavaBinder(  520):         at android.os.Handler.<init>(Handler.java:114)
07-31 10:31:39.226 E/JavaBinder(  520):         at android.widget.Toast$TN$2.<init>(Toast.java:336)
07-31 10:31:39.226 E/JavaBinder(  520):         at android.widget.Toast$TN.<init>(Toast.java:336)
07-31 10:31:39.226 E/JavaBinder(  520):         at android.widget.Toast.<init>(Toast.java:103)
07-31 10:31:39.226 E/JavaBinder(  520):         at android.widget.Toast.makeText(Toast.java:256)
07-31 10:31:39.226 E/JavaBinder(  520):         at com.android.server.XHService.XHBrightnessAndeUsb(XHService.java:768)
07-31 10:31:39.226 E/JavaBinder(  520):         at android.app.IXHManager$Stub.onTransact(IXHManager.java:361)
07-31 10:31:39.226 E/JavaBinder(  520):         at android.os.Binder.execTransact(Binder.java:565)

 解决方法  Handler(Looper.getMainLooper())

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void toastTest(String str) {
    new Thread(new Runnable() {
 
        @Override
        public void run() {
            Handler handler = new Handler(Looper.getMainLooper());
            handler.post(new Runnable() {
 
                @Override
                public void run() {
                    Toast.makeText(mContext, str, Toast.LENGTH_LONG).show();
                }
            });
        }
    }).start();
}

  

  

posted @   CrushGirl  阅读(3181)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示