Android之Toast使用

Posted 骨灵冷

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android之Toast使用相关的知识,希望对你有一定的参考价值。

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。

四、自定义视图显示

自定义视图需要自己构建一个XML布局文件,在里面添加好元素之后,使用 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。

以上是关于Android之Toast使用的主要内容,如果未能解决你的问题,请参考以下文章

Android之Toast使用

android自定义Toast之-弹出消息

Android笔记之——消息Toast

Android学习笔记之Toast详解

Android之提示Toast

Android之Toast通知的几种自定义用法