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