一、前提
Toast是一种简易的消息提示框,用来提示消息,我们可以知道在每次点击退出按钮时,总会有提醒说再点击一次退出,这个提示就是Toast
二、目标
Toast消息提示框
三、内容
在正式进行操作之前,我们首先写好布局代码,以便测试
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:fitsSystemWindows="true"
android:orientation="vertical"
>
<Button
android:id="@+id/bt1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="默认"
/>
<Button
android:id="@+id/bt2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="改变位置"
/>
<Button
android:id="@+id/bt3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="带图片"
/>
<Button
android:id="@+id/bt4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="test"
/>
</LinearLayout>
在MainActivity中添加,都是基本的点击事件
package com.example.sunny.toast;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private Button button1,button2,button3,button4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1= (Button) findViewById(R.id.bt1);
button2= (Button) findViewById(R.id.bt2);
button3= (Button) findViewById(R.id.bt3);
button4= (Button) findViewById(R.id.bt4);
Onclick onclick=new Onclick();
button1.setOnClickListener(onclick);
button2.setOnClickListener(onclick);
button3.setOnClickListener(onclick);
button4.setOnClickListener(onclick);
}
class Onclick implements View.OnClickListener{
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.bt1:
break;
case R.id.bt2:
toast.show();
break;
case R.id.bt3:
break;
case R.id.bt4:
break;
}
}
}
}
1、简单操作
首先我们先让它进行一次常规显示,在case R.id.btn1下添加
Toast.makeText(MainActivity.this, "hello", Toast.LENGTH_SHORT).show();
这是最常规的一种显示,我们来理解一下,makeText()方法表示做一个只包含文本视图的标准toast,其中的三个参数分别是上下文对象,显示的内容,显示的时间(只有LONG和SHORT两种),一定不要忘记最后的show()方法,否则Toast不会显示
2、设置位置
对位置进行改变,在case R.id.btn2下添加
Toast toast=Toast.makeText(MainActivity.this, "hello", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER,0,0);//改变位置
toast.show();
setGravity()方法表示设置通知应该出现在屏幕上的位置,其参数分别是位置,x的偏移以及y的偏移,将其居中显示,还可以其他设计
3、自定义
在进行自定义设置前,我们先需要为它写一个xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#99000000"
android:gravity="center"
>
<LinearLayout
android:layout_width="100dp"
android:layout_height="100dp"
android:orientation="vertical"
android:gravity="center"
>
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="fitCenter"
/>
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textColor="#FFFFFF"
android:layout_marginTop="5dp"
/>
</LinearLayout>
</LinearLayout>
在case R.id.btn3下添加
Toast toast2=new Toast(MainActivity.this);
LayoutInflater inflater=LayoutInflater.from(MainActivity.this);
View view=inflater.inflate(R.layout.toast, null);
ImageView imageview= (ImageView) view.findViewById(R.id.iv);
TextView textview= (TextView) view.findViewById(R.id.tv);
imageview.setImageResource(R.mipmap.ic_launcher);
textview.setText("hello");
toast2.setView(view);
toast2.setDuration(Toast.LENGTH_SHORT);//显示的时间长短
toast2.show();
在这段代码中,其实大多都是之前讲过的,通过LayoutInflate来找layout下的布局文件,找到其id进行匹配,为图片和文本框设置资源以及内容,将建立好的view添加到toast中,设置时间后进行显示
4、封装
我们可以发现,不管我们点击多少次他都会一直这样显示,浪费了很多时间,我们希望的是,不管点击多少次总以最后一次点击为主,这时我们可以将Toast进行封装使用
首先,为Toast写个java文件,为他写一个showMsg()方法,传入上下文对象以及消息,进行判断,若toast为空,也就是没有点击的时候,则创建一个toast,若存在toast,则调用setText()方法,此方法表示,更新之前使用makeText()方法创建的Toast中的文本,也就是无论点击多少次,永远都在更新
package com.example.sunny.toast;
import android.content.Context;
import android.widget.Toast;
/**
* Created by Sunny on 2020/4/20.
*/
public class ToastUtil {
public static Toast toast;
public static void showMsg(Context context,String msg){
if (toast==null){
toast=Toast.makeText(context,msg,Toast.LENGTH_SHORT);
}else{
toast.setText(msg);
}
toast.show();
}
}
在case R.id.btn4下添加,调用刚才写的方法
ToastUtil.showMsg(MainActivity.this,"hhh");
四、总结
Toast组件不难理解且操作较为简单,后续会更新