Android Studio 之 Toast

学向勤中得,萤窗万卷书。这篇文章主要讲述Android Studio 之 Toast相关的知识,希望能为你提供帮助。
 

?简介
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 吧;
Android Studio 之 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(); } }); } }

?运行效果
Android Studio 之 Toast

文章图片

?用外部类来实现点击事件
修改 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()  方法;
?运行效果
Android Studio 之 Toast

文章图片

 
?小结
在活动中,通过    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 控件的 idmBtnApple = 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(); } }); } }

?运行效果
Android Studio 之 Toast

文章图片

?声明
参考资料:
【AndroidStudio自定义Toast及其用法】
【Android Studio 在活动中使用Toast】
【Android Studio 之 Toast】 
MainActivity


    推荐阅读