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(); } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 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】