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必须在主线程中进行。

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())

    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 @ 2020-05-23 13:59  CrushGirl  阅读(3102)  评论(0编辑  收藏  举报