Android开发中的Toast相信大家比较熟悉,它是为了提示用户,提高与用户交互的友好性而存在的。那么Toast有哪几种使用方法呢?小编大致罗列了以下几种:

(1)、默认显示

(2)、自定义位置显示

(3)、带图片显示

(4)、自定义布局样式显示

(5)、自定义时间段显示

下面将分别对各个显示方式进行解析:

一、默认显示


Toast的默认显示如下:


Toast toast = Toast.makeText(this,"默认显示",Toast.LENGTH_SHORT);

toast.show();



其中要说明的是第三个参数,是表示Toast的显示时间,这个时间默认在Toast类中是LENGTH_SHORT和LENGTH_LONG,通过查看源码发现SHORT表示的是2000毫秒,LONG表示的是3500毫秒。有说法是说这个显示时间可以自定义,但是这个时间小编认为应该是介于2000到3500之间,不能超过或低于界限值。



二、自定义位置显示


自定义位置显示需要用到Toast类的setGravity方法。通过查看API说明可以了解到:


setGravity()方法有三个参数,分别是Gravity常量的位置指定,相对于第一个参数指定的x偏移量和y偏移量


具体例子如下:


Toast toast = Toast.makeText(this,"自定义了位置",Toast.LENGTH_SHORT);
toast.setGravity(Gravity.TOP|Gravity.CENTER,100,20);
toast.show();



 在setGravity方法中,第一个参数表示不设置偏移量的情况下会顶部居中显示,而设置了100的x偏移量和20的y偏移量会发生偏移。


需要知道的是x偏移是,向左正右负;y偏移是上负下正。单位是像素。偏移发生的中心是toast视图的中心偏移。



三、带图片显示


Toast可以显示图片,方法是利用获取Toast对应的布局视图,然后将Image添加到布局中,最后显示即可。


两个关键方法:获取Toast的布局视图getView(),以及添加子视图的addView()


代码如下:


Toast toast = Toast.makeText(this, R.string.hello_world, Toast.LENGTH_LONG);
			LinearLayout layout = (LinearLayout) toast.getView();
			
			ImageView image = new ImageView(this);
			image.setImageResource(R.drawable.ic_launcher);
			layout.addView(image,1);
			toast.setGravity(Gravity.TOP|Gravity.CENTER,200, 200);
			toast.show();



其实只要把Toast当成一个布局视图就可以了,然后往视图里添加Child视图,整体形成了一个ViewGroup。



四、自定义视图显示


inflater充气泵为XML布局文件进行重新,使之映射成一个布局的视图对象实例。


方法是inflate().


首先定义自定义布局文件如下:


<?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" >
    <TextView 
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:text="A"
        android:gravity="center"/>
    <ImageView 
        android:src="@drawable/imgae"
        android:layout_width="100dp"
        android:layout_height="100dp"/>
    <TextView 
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:text="B"
        android:gravity="center"/>
</LinearLayout>



Toast的Java代码如下:


LayoutInflater inflater = getLayoutInflater();
			View layout = inflater.inflate(R.layout.toast_custom_layout, (ViewGroup) findViewById(R.id.toast_root));
			
			Toast toast = Toast.makeText(this, R.string.hello_world, Toast.LENGTH_LONG);
			toast.setView(layout);
			toast.setGravity(Gravity.CENTER, 0, 0);
			toast.show();

使用了toast的setView方法添加视图.




五、时间叠加的解决



toast对象显示时会默认显示一段时间,当多个Toast对象被触发时会形成时间叠加,默认会当第一个toast对象显示完毕之后其余的toast才开始显示,这样会造成的问题就是toast滞留时间很长,影响用户体验。解决思路如下:



当我们的toast对象是通过makeText方法创建的时候,显示的内容可以通过toast对象的setText方法进行替换。



API原文解释是:



Update the text in a Toast that was previously created using one of the makeText() methods.



基本就是:



if(toast == null)
{
     toast = makeToast(...,text,...);
}
else
{
     toast.setText(text);
}
toast.show();



这样就可以直接替换toast里面的内容而不用重新创建toast。