•简介

  Toast 是 Android 系统提供的一种非常好的提醒方式;

  在程序中可以使用它将一些短小的信息通知给用户;

  这些信息会在一段时间内自动消失,并且不会占用任何屏幕空间

•Toast.makeText()函数原型

  Toast.makeText(参数1,参数2,参数3); 

  • 参数1是 Context,是 Toast 要求的上下文

    • 由于活动本身就是一个Context对象,因此直接传入 XXXActivity.this 即可,或者填入 getApplicationContext()
  • 参数2是 Toast 显示的文本内容

  • 参数3是 Toast 显示的时长,有两个内置常量可以选择  Toast.LENGTH_SHORT  和  Toast.LENGTH_LONG

•准备工作

  新建一个项目,并选择 Empty Activity;

  这样,Android Studio 为我们自动生成了 MainActivity.java 和 activity_main.xml 文件;

  修改 activity_mian.xml 中的代码;

activity_main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical"
  6. android:padding="10dp">
  7.  
  8. <Button
  9. android:id="@+id/btn_1"
  10. android:layout_width="match_parent"
  11. android:layout_height="wrap_content"
  12. android:layout_marginTop="10dp"
  13. android:background="#33CCCC"
  14. android:text="Button_1" />
  15.  
  16. <Button
  17. android:id="@+id/btn_2"
  18. android:layout_width="match_parent"
  19. android:layout_height="wrap_content"
  20. android:layout_marginTop="10dp"
  21. android:background="#D54D2B"
  22. android:text="Button_2" />
  23. </LinearLayout>

  在该布局中,定义了两个 Button;

  想要使用 Toast,需要定义一个弹出 Toast 的触发点;

  正好我们定义了两个 Button,那我们就让点击 Button 的时候弹出一个 Toast 吧;

  有两种方式定义 Button 的点击事件:

  • 用匿名类来实现点击事件的方法

  • 用外部类来实现点击事件的代码如下

•用匿名类来实现点击事件

  修改 MainActivity.java 中的代码;

MainActivity.java

  1. public class MainActivity extends AppCompatActivity {
  2.  
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5.  
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_main);//给当前的活动加载一个布局
  8. Button btn1 = findViewById(R.id.btn_1);
  9.  
  10. //用匿名类来实现点击事件的方法
  11. btn1.setOnClickListener(new View.OnClickListener() {
  12. public void onClick(View v) {
  13. Toast.makeText(MainActivity.this, "Button_1", Toast.LENGTH_SHORT).show();
  14. }
  15. });
  16. }
  17. }

•运行效果

  

•用外部类来实现点击事件

  修改 MainActivity.java 中的代码;

MainActivity.java

  1. public class MainActivity extends AppCompatActivity {
  2.  
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5.  
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_main);//给当前的活动加载一个布局
  8. Button btn2 = findViewById(R.id.btn_2);
  9. btn2.setOnClickListener(new MyClick());
  10. }
  11.  
  12. //用外部类来实现点击事件的代码如下
  13. class MyClick implements View.OnClickListener {
  14.  
  15. @Override
  16. public void onClick(View v) {
  17. Toast t = Toast.makeText(MainActivity.this, "Button_2", Toast.LENGTH_SHORT);
  18. t.show();
  19. }
  20. }
  21. }

  当然,你也可以这么写;

  1. public class MainActivity extends AppCompatActivity implements View.OnClickListener{
  2.  
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5.  
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_main);//给当前的活动加载一个布局
  8. Button btn2 = findViewById(R.id.btn_2);
  9. btn2.setOnClickListener(this);
  10. }
  11.  
  12. @Override
  13. public void onClick(View v) {
  14. Toast t = Toast.makeText(MainActivity.this, "Button_2", Toast.LENGTH_SHORT);
  15. t.show();
  16. }
  17. }

  让 MainActivity 实例化 View.OnClickListener 接口,并重写  onClick() 方法;

•运行效果

  

•小结

  在活动中,通过  findViewById() 方法获取到在布局文件中定义的元素;

  得到按钮实例后,我们通过  setOnClickListener() 方法为按钮注册一个监听器;

  点击按钮就会执行监听器中的  onClick() 方法;

  因此将点击按钮弹出 Toast 的功能编写在  onClick() 方法中;

  Toast 的用法非常简单,通过静态方法  makeText() 创建出一个 Toast 对象;

  然后调用  show() 方法将 Toast 显示出来即可;

•自定义 Toast

  首先,在 layout 文件夹下自定义一个 .xml 文件,并命名为 toast.xml;

  在里面放入如下代码:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:layout_gravity="center">
  6.  
  7. <com.example.uibestpractice.CircleImageView
  8. android:id="@+id/toast_image_view"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:layout_centerHorizontal="true"
  12. android:scaleType="centerInside" />
  13.  
  14. <TextView
  15. android:id="@+id/toast_text_view"
  16. android:layout_width="wrap_content"
  17. android:layout_height="wrap_content"
  18. android:layout_below="@id/toast_image_view"
  19. android:layout_centerHorizontal="true"
  20. android:gravity="center"
  21. android:textColor="@color/black"
  22. android:textSize="15sp" />
  23. </RelativeLayout>

  其中的 <CircleImageView> 控件是我之前自定义的圆形 ImageView,详情见我这篇博客

  然后,新建一个 Empty Activity ,命名为 TestTostActivity;

  这样Android Studio自动为我们生成了 TestToastActivity.java 和 activity_test_toast.xml;

  在 activity_test_toast.xml 中添加如下代码:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. android:background="@color/blue"
  8. android:padding="10dp">
  9.  
  10. <TextView
  11. android:id="@+id/tv"
  12. android:layout_width="match_parent"
  13. android:layout_height="wrap_content"
  14. android:gravity="center"
  15. android:text="测试自定义 Toast"
  16. android:textSize="20sp"
  17. android:textColor="@color/black"/>
  18.  
  19. <LinearLayout
  20. android:layout_width="wrap_content"
  21. android:layout_height="wrap_content"
  22. android:layout_alignParentBottom="true"
  23. android:layout_centerHorizontal="true"
  24. android:orientation="horizontal">
  25.  
  26. <Button
  27. android:id="@+id/btn_apple"
  28. android:layout_width="wrap_content"
  29. android:layout_height="wrap_content"
  30. android:text="Apple"/>
  31.  
  32. <Button
  33. android:id="@+id/btn_banana"
  34. android:layout_width="wrap_content"
  35. android:layout_height="wrap_content"
  36. android:text="Banana" />
  37. </LinearLayout>
  38. </RelativeLayout>

  在 TestToastActivity.java 中设置相应的点击事件,并设置  Toast,代码如下:

  1. public class TestToastActivity extends AppCompatActivity {
  2.  
  3. private Button mBtnApple;
  4. private Button mBtnBanana;
  5. private Toast toast;
  6. private LayoutInflater inflater;
  7. private View view;
  8. private ImageView Iv;
  9. private TextView Tv;
  10.  
  11. @Override
  12. protected void onCreate(Bundle savedInstanceState) {
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.activity_test_toast);
  15.  
  16. toast = new Toast(getApplicationContext());
  17. inflater = LayoutInflater.from(TestToastActivity.this);
  18. view = inflater.inflate(R.layout.toast, null);
  19. Iv = view.findViewById(R.id.toast_image_view);//找到 toast.xml 中 ImageView 控件的 id
  20. Tv = view.findViewById(R.id.toast_text_view);//找到 toast.xml 中 TextView 控件的 id
  21.  
  22. mBtnApple = findViewById(R.id.btn_apple);
  23. mBtnBanana = findViewById(R.id.btn_banana);
  24.  
  25. mBtnApple.setOnClickListener(new View.OnClickListener() {
  26.  
  27. @Override
  28. public void onClick(View v) {
  29.  
  30. Iv.setImageResource(R.mipmap.apple_96px);
  31. Tv.setText("Apple");
  32.  
  33. toast.setView(view);
  34. toast.setDuration(Toast.LENGTH_SHORT);
  35. toast.setGravity(Gravity.CENTER, 0, 0);//将该toast居中显示
  36. toast.show();
  37. }
  38. });
  39. mBtnBanana.setOnClickListener(new View.OnClickListener() {
  40.  
  41. public void onClick(View v) {
  42. Iv.setImageResource(R.mipmap.banana_96px);
  43. Tv.setText("Banana");
  44.  
  45. toast.setView(view);
  46. toast.setDuration(Toast.LENGTH_SHORT);//Toast 显示的时长
  47. toast.setGravity(Gravity.CENTER, 0, 0);//将该toast居中显示
  48. toast.show();
  49. }
  50. });
  51. }
  52. }

•运行效果

  

•声明

  参考资料:

  【AndroidStudio自定义Toast及其用法

  【Android Studio 在活动中使用Toast

  1. MainActivity

Android Studio 之 在活动中使用 Toast的更多相关文章

  1. 使用Android Studio调试UiAutomator过程中遇到的问题

    声明: 这里纪录了个人学习和使用Android Studio调试UiAutomator过程中遇到遇到的问题,不定时进行更新,欢迎一起交流学习 1.Excution faild for task ‘:a ...

  2. Android studio在使用过程中的问题总汇!

    使用android studio也有一段时间了,汇总了一下这段时间内遇到一些常见问题,希望能够帮助到大家! 一.字体大小问题 在android studio的使用过程中没有发现类似于Eclipse中的 ...

  3. Android 高级UI设计笔记17:Android在非UI线程中显示Toast

    1. 子线程的Toast怎么显示不出来? 因为Toast在创建的时候会依赖于一个Handler,并且一个Handler是需要有一个Looper才能够创建,而普通的线程是不会自动去创建一个Looper对 ...

  4. 在Android Studio 0.5.2中使用ArcGIS Android SDK

    环境 操作系统:Mac OSX 10.8.5Android Studio: 0.5.2ArcGIS Android SDK: 10.2.3 操作步骤 在Android Studio中新建一个Modul ...

  5. Android Studio:layout-sw600dp文件夹中创建activity_main.xml

    1.右键res文件夹,新建Android resource directory文件夹 2.在resource type中选择layout  3.将Directory name命名为layout-sw6 ...

  6. 解决Android Studio 2.2.3中添加.cpp .h文件在Project->Android无法显示,无法正常编译问题。

    搭配使用 Android Studio 2.2 或更高版本与 Android Plugin for Gradle 版本 2.2.0 或更高版本时,您可以将 C 和 C++ 代码编译到 Gradle 与 ...

  7. Android Studio项目/Flutter 案例中Gradle报错通用解决方案(包括Unable to tunnel through proxy问题)

    目录 Step 1:修改Gradle版本为本地版本 Step 2:修改classpath为Android Studio版本 Step 3:关闭代理 Step 1:修改Gradle版本为本地版本     ...

  8. Android Studio在代码重构中的妙用

    代码重构几乎是每个程序员在软件开发中必须要不断去做的事情,以此来不断提高代码的质量.Android Stido(以下简称AS)以其强大的功能,成为当下Android开发工程师最受欢迎的开发工具,也是A ...

  9. android studio: 实现类似于XCode中的#pragma mark的效果

    代码行数写多了,想找一个指定的方法真困难,关键有时候记不住方法的名字,用Ctrl+O也不好使,突然想到以前做iOS开发时,XCode里有一个#pragma mark的功能,很好用:在代码中定义这样一个 ...

随机推荐

  1. CSS3 Animation & Weather Icons

    CSS3 Animation & Weather Icons google fonts <link href='https://fonts.googleapis.com/css?fami ...

  2. Flutter in DartPad

    Flutter in DartPad Gist Sharing https://github.com/dart-lang/dart-pad/wiki/Sharing-Guide https://gis ...

  3. react-parent-child-lifecycle-order

    react-parent-child-lifecycle-order react parent child lifecycle order live demo https://33qrr.csb.ap ...

  4. classnames & React & taro

    classnames & React & taro classnames https://www.npmjs.com/package/classnames demo https://g ...

  5. 比特币大涨之际,VAST空投火爆来袭!

    昨天特斯拉宣布投资了15亿美元的比特币,消息一出,币圈沸腾,比特币瞬间拉升,突破4万美元关口,现价46000美元!大涨20%,又刷新历史新高! 另外NGK项目热度最高的BGV也是不断刷新历史新高,数据 ...

  6. NGK全球行伦敦站,SPC推动全球数字金融创新

    近日,NGK全球巡回路演在英国的首都伦敦盛大落幕,此次路演有幸邀请到了西欧区块链业界弗洛伊德大咖,NGK方面代表鲍利斯以及英国及其组周边国家社群意见代表马丁内斯等人,总计参与人数达到了数十人. 路演一 ...

  7. NGK与AOFEX交易所达成战略合作,BGV即将上线A网!

    据NGK官方消息,NGK官方已经与英国伦敦知名交易所AOFEX交易所达成战略合作,将于12月2日全球首发BGV,现已开启充值服务.同时,在12月3日15:00,用户可以参与BGV交易:在12月4日15 ...

  8. 「NGK每日快讯」12.1日NGK公链第28期官方快讯!

  9. MySQL -- 内部临时表

    本文转载自MySQL -- 内部临时表 UNION UNION语义:取两个子查询结果的并集,重复的行只保留一行 表初始化 CREATE TABLE t1(id INT PRIMARY KEY, a I ...

  10. 将AOSP源码导入到Android Studio进行查看

    生成iml和ipr文件 source build/envsetup.sh lunch aosp_x86-eng # 或者直接输入lunch,然后选择对应的target make idegen deve ...