•简介

  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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="10dp"> <Button
android:id="@+id/btn_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:background="#33CCCC"
android:text="Button_1" /> <Button
android:id="@+id/btn_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:background="#D54D2B"
android:text="Button_2" />
</LinearLayout>

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

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

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

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

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

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

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

  修改 MainActivity.java 中的代码;

MainActivity.java

public class MainActivity extends AppCompatActivity {

    @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);//给当前的活动加载一个布局
Button btn1 = findViewById(R.id.btn_1); //用匿名类来实现点击事件的方法
btn1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Button_1", Toast.LENGTH_SHORT).show();
}
});
}
}

•运行效果

  

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

  修改 MainActivity.java 中的代码;

MainActivity.java

public class MainActivity extends AppCompatActivity {

    @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);//给当前的活动加载一个布局
Button btn2 = findViewById(R.id.btn_2);
btn2.setOnClickListener(new MyClick());
} //用外部类来实现点击事件的代码如下
class MyClick implements View.OnClickListener { @Override
public void onClick(View v) {
Toast t = Toast.makeText(MainActivity.this, "Button_2", Toast.LENGTH_SHORT);
t.show();
}
}
}

  当然,你也可以这么写;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);//给当前的活动加载一个布局
Button btn2 = findViewById(R.id.btn_2);
btn2.setOnClickListener(this);
} @Override
public void onClick(View v) {
Toast t = Toast.makeText(MainActivity.this, "Button_2", Toast.LENGTH_SHORT);
t.show();
}
}

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

•运行效果

  

•小结

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

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

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

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

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

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

•自定义 Toast

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

  在里面放入如下代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"> <com.example.uibestpractice.CircleImageView
android:id="@+id/toast_image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:scaleType="centerInside" /> <TextView
android:id="@+id/toast_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/toast_image_view"
android:layout_centerHorizontal="true"
android:gravity="center"
android:textColor="@color/black"
android:textSize="15sp" />
</RelativeLayout>

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

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

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

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

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/blue"
android:padding="10dp"> <TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="测试自定义 Toast"
android:textSize="20sp"
android:textColor="@color/black"/> <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:orientation="horizontal"> <Button
android:id="@+id/btn_apple"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Apple"/> <Button
android:id="@+id/btn_banana"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Banana" />
</LinearLayout>
</RelativeLayout>

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

public class TestToastActivity extends AppCompatActivity {

    private Button mBtnApple;
private Button mBtnBanana;
private Toast toast;
private LayoutInflater inflater;
private View view;
private ImageView Iv;
private TextView Tv; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_toast); toast = new Toast(getApplicationContext());
inflater = LayoutInflater.from(TestToastActivity.this);
view = inflater.inflate(R.layout.toast, null);
Iv = view.findViewById(R.id.toast_image_view);//找到 toast.xml 中 ImageView 控件的 id
Tv = view.findViewById(R.id.toast_text_view);//找到 toast.xml 中 TextView 控件的 id mBtnApple = findViewById(R.id.btn_apple);
mBtnBanana = findViewById(R.id.btn_banana); mBtnApple.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) { Iv.setImageResource(R.mipmap.apple_96px);
Tv.setText("Apple"); toast.setView(view);
toast.setDuration(Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);//将该toast居中显示
toast.show();
}
});
mBtnBanana.setOnClickListener(new View.OnClickListener() { public void onClick(View v) {
Iv.setImageResource(R.mipmap.banana_96px);
Tv.setText("Banana"); toast.setView(view);
toast.setDuration(Toast.LENGTH_SHORT);//Toast 显示的时长
toast.setGravity(Gravity.CENTER, 0, 0);//将该toast居中显示
toast.show();
}
});
}
}

•运行效果

  

•声明

  参考资料:

  【AndroidStudio自定义Toast及其用法

  【Android Studio 在活动中使用Toast

MainActivity

最新文章

  1. jQuery-DataTables相关的网址
  2. python3 异常处理
  3. 3.UNION
  4. php解析json数组
  5. Opencv step by step - 加载视频
  6. Settings.System.getInt获取Setting里的设置信息
  7. 基数---SQL Server 2008 Bible
  8. [Openstack] Expecting an auth URL via either --os-auth-url or env[OS_AUTH_URL]
  9. 东芝MIPI解码TC358746AXBG和OV6211使用及配置
  10. iOS 视频直播弹幕的实现
  11. Go实现海量日志收集系统(二)
  12. Android 视频通信,低延时解决方案
  13. nginx的location root alias指令以及区别
  14. 洛谷 P4148 简单题 解题报告
  15. idea-常用插件-nginx
  16. CentOS7.2中systemctl的使用
  17. 【ZJOI2015】诸神眷顾的幻想乡 解题报告
  18. 安装mysql驱动之 mysqlclient 出现的报错处理(ubuntu16.04)
  19. QT开发(十二)——QT事件处理机制
  20. 【BZOJ4864】[BeiJing 2017 Wc]神秘物质 Splay

热门文章

  1. js closures all in one
  2. USDN代币的特点
  3. 10月份上线的NGK有什么不同之处?
  4. spring boot插件开发实战和原理
  5. Maven报错:Unsupported major.minor version 51.0
  6. Loki日志系统
  7. arch 安装笔记
  8. herry菌插件(B站C站)下载与安装(更新中)&gt;&gt;
  9. TorchVision Faster R-CNN 微调,实战 Kaggle 小麦检测
  10. 剑指 Offer 50. 第一个只出现一次的字符 + 哈希表 + 有序哈希表