Android Studio 之 在活动中使用 Toast
阅读原文时间:2023年07月08日阅读:1

•简介

  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


<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" />  

  在该布局中,定义了两个 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;

  在里面放入如下代码:


<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" />  

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

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

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

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


<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>  

  在 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