Toast的用法总结
Toast的用法总结
简介
Toast是一个弹出消息,他可以快速地响应用户的一些事件。例如保存配置到SD卡。
Toast不管用户在后台跟Activity进行交互还是已经返回到在主界面,它始终可以把消息显示出来。并且用户无法使用按键"返回"键或其他的方式来取消Toast消息。消息会以淡进淡出的方式进行显示。消息显示的时间可以以程序的方式进行设置。大部分情况,Toast是一个短消息,但是你可以给它创建一个自定义View。例如单词后面加个图片。Toast在屏幕中的位置也可以自由地进行控制。Toast可以从Activity或在Service中进行创建。如果一个Toast在Service中进行创建,它会显示在Activity的前面,焦点已经聚焦到它身上,或主界面的上面。
创建一个标准Toast
一个标准Toast会通过调用静态makeText()方法进行创建。
- Toast.makeText(getApplicationContext(), "Hello, The Code Project!",
- Toast.LENGTH_SHORT).show();
参数为应用的上下文对象,消息本身及Toast的显示时间。你可以通过直接设置Text值方式或直接饮用已经保存的String的方式进行显示。在我们的用例当中,R.String.hello_codeproject资源包含"Hello, The Code Project!"字符串。显示时间为LENGTH_SHORT或LENGTH_LONG。通常默认设置为短消息。你可以以程序的方式通过调用setDuration方法给他定义显示时间。
makeText()方法的背后逻辑很简单:一个Toast对象创建并且设置了字符串及显示时间。然后,你可以调用show()方法对刚刚创建的Toast进行显示,或设置一些额外的属性,例如它在屏幕中的位置或设置一个自定义View给它。新创建的Toast如下图进行显示。
设置Toast在屏幕中的位置
你可以设置Toast在屏幕中的位置通过调用 setGravity方法
- Toast toast = Toast.makeText(getApplicationContext(),"Hello, The Code Project!", Toast.LENGTH_LONG);
- toast.setGravity(Gravity.CENTER, 0, 0);
- toast.show();
第一个参数通常用来设置自己的Gravity。第二个和第三个参数定义它相对于第一个参数的偏移量。上述代码的执行结果如下图:
添加一个图片到标准Toast
为了添加一个图片到标准Toast,你必须创建一个ImageView对象,然后从资源中使用setImageResource方法设置它的图片。然后你要获取标准view(实际上市一个LinearLayout)和添加新创建的ImageView对象给它。你要插入的位置可以进行设置(本例子中使用的是0,所以图片会在文字的上面进行显示)。代码如下
- Toast toast = Toast.makeText(getApplicationContext(), "Hello, The Code Project!", Toast.LENGTH_LONG);
- toast.setGravity(Gravity.CENTER, 0, 0);
- LinearLayout toastView = (LinearLayout) toast.getView();
- ImageView imageCodeProject = new ImageView(getApplicationContext());
- imageCodeProject.setImageResource(R.drawable.codeprojectlogo);
- toastView.addView(imageCodeProject, 0);
- toast.show();
显示的效果为:
通过自定义Layout创建Toast
为了创建自定义Layout的Toast,我们需要先创建自定义Layout,代码如下:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_height="wrap_content" android:layout_width="wrap_content"
- android:background="#ffffffff" android:orientation="vertical"
- android:id="@+id/llToast" >
- <TextView
- android:layout_height="wrap_content"
- android:layout_margin="1dip"
- android:textColor="#ffffffff"
- android:layout_width="fill_parent"
- android:gravity="center"
- android:background="#bb000000"
- android:id="@+id/tvTitleToast" />
- <LinearLayout
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:id="@+id/llToastContent"
- android:layout_marginLeft="1dip"
- android:layout_marginRight="1dip"
- android:layout_marginBottom="1dip"
- android:layout_width="wrap_content"
- android:padding="15dip"
- android:background="#44000000" >
- <ImageView
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:layout_width="wrap_content"
- android:id="@+id/tvImageToast" />
- <TextView
- android:layout_height="wrap_content"
- android:paddingRight="10dip"
- android:paddingLeft="10dip"
- android:layout_width="wrap_content"
- android:gravity="center"
- android:textColor="#ff000000"
- android:id="@+id/tvTextToast" />
- </LinearLayout>
- </LinearLayout>
我们创建的Toast看起来像一个Dialog,它拥有头部,图片及消息。我们现在需要当创建Toast.的时候设置该Layout。我们也可以设置对话框的标题,消息字符串及图片。下面就是我们做的一些工作:
- LayoutInflater inflater = getLayoutInflater();
- View layout = inflater.inflate(R.layout.customtoast,
- (ViewGroup) findViewById(R.id.llToast));
- ImageView image = (ImageView) layout.findViewById(R.id.tvImageToast);
- image.setImageResource(R.drawable.codeprojectlogo);
- TextView title = (TextView) layout.findViewById(R.id.tvTitleToast);
- title.setText("Attention");
- TextView text = (TextView) layout.findViewById(R.id.tvTextToast);
- text.setText("Hello, The Code Project!");
- Toast toast = new Toast(getApplicationContext());
- toast.setGravity(Gravity.RIGHT | Gravity.TOP, 12, 40);
- toast.setDuration(Toast.LENGTH_LONG);
- toast.setView(layout);
- toast.show();
最初的两行我们通过解析XML文件(我们使用了LayoutInflater类的实例,通过getLayoutInflater返回)初始化了View对象。第一个参数为Layout的id- R.layout.customToast(它跟 res/layout/customtoast.xml 文件匹配)。然后我们获取了Image的引用,头部标题及消息文本,然后以适当的数据填充他们。最终,我们创建了Toast本身,设置了所有需要的参数及布局(在这里使用了setView方法)。结果我们获得的Toast的显示效果为:

浙公网安备 33010602011771号