在程序开发中,经常有我们程序执行完成之后需要提醒用户操作完成。但是只是提醒,而不需要用户去操作什么的时候,我们就回用到Taost来弹出要提示的内容。
Toast的用法
用Toast类的makeText()方法创建
Toast.makeText(this,"要Toast的内容",Toast.LENGTH_SHORT);
三个参数为 上下文、要提示的内容、提示显示的时间
用构造方法创建Toast
通过Toast类的构造方法创建一个toast并设置要显示的内容。
Toast toast = new Toast(this);
toast.setDuration(Toast.LENGTH_SHORT);
//toast.setText("111111111"); //如果设置这句会报错This Toast was not created with Toast.makeText()at android.widget.Toast.setText(Toast.java:303)
toast.setGravity(Gravity.CENTER,0,0);//设置显示的位置,x轴偏移量,y轴偏移量
LinearLayout layout = new LinearLayout(this);//创建一个线性布局
ImageView image= new ImageView(this);//创建一个ImageView
image.setImageResource(R.mipmap.ic_launcher);//设置图片
image.setPadding(5,5,5,5);//设置图片的padding
layout.addView(image);//将图片添加到线性布局中
TextView tv = new TextView(this);//创建一个TextView
tv.setText("提示内容");//设置提示的内容
tv.setTextSize(20);//设置字体的大小
tv.setTextColor(Color.RED);//设置字体的颜色
//设置TextView的大小
tv.setLayoutParams(new DrawerLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
tv.setGravity(Gravity.CENTER);//设置TextView内容的显示位置。如果不设置TextView 大小而只设置这个属性是不起作用的,因为默认的大小是wrap_content,内容就已经在TextView的中央了
layout.addView(tv);//将TextView 添加到线性布局中
//如果不设置下面一句会报错 java.lang.RuntimeException: setView must have been called at android.widget.Toast.show(Toast.java:113)
toast.setView(layout);//将我们创建的布局设置给toast
toast.show();//展示toast
以上两种的问题
当我们连续的点击按钮的时候,上面两种方法显示的toast会一个个显示直到结束。而我们应该是在同样的内容显示的时候不重复显示,也是提升用户体验的一种方法。我们稍微判断一下
public class TestActivity extends Activity {
Toast toast;
private String message = "我是一个Toast";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//创建一个线性布局,并且给里面添加一个button,点击button弹出提示
LinearLayout layout = new LinearLayout(this);
Button button= new Button(this);
button.setText("点击弹出Toast");
layout.addView(button);
setContentView(layout);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (toast ==null){
showToast();
}else {
toast.setText(message);
}
toast.show();
}
});
}
private void showToast() {
toast = Toast.makeText(this,
message,
Toast.LENGTH_SHORT);
}
}
为了方便我们将Toast提示抽离出来 单独也一个类
public class MyToast {
public static Toast toast;
public static void showInfo(Context context, String message){
if (toast == null){
toast = Toast.makeText(context,message,Toast.LENGTH_SHORT);
}else {
toast.setText(message);
}
toast.show();
}
}
此时在button的点击事件里面我们直接用 MyToast.showInfo(TestActivity.this,"Toast的内容"); 调用即可