Toast的用法总结

Toast的用法总结

转载自:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=166332&reltid=199247&pre_thread_id=0&pre_pos=1&ext=

简介
  Toast是一个弹出消息,他可以快速地响应用户的一些事件。例如保存配置到SD卡。
  Toast不管用户在后台跟Activity进行交互还是已经返回到在主界面,它始终可以把消息显示出来。并且用户无法使用按键"返回"键或其他的方式来取消Toast消息。消息会以淡进淡出的方式进行显示。消息显示的时间可以以程序的方式进行设置。大部分情况,Toast是一个短消息,但是你可以给它创建一个自定义View。例如单词后面加个图片。Toast在屏幕中的位置也可以自由地进行控制。Toast可以从Activity或在Service中进行创建。如果一个Toast在Service中进行创建,它会显示在Activity的前面,焦点已经聚焦到它身上,或主界面的上面。
创建一个标准Toast
  一个标准Toast会通过调用静态makeText()方法进行创建。

  1. Toast.makeText(getApplicationContext(), "Hello, The Code Project!",
  2.    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方法

  1. Toast toast = Toast.makeText(getApplicationContext(),"Hello, The Code Project!", Toast.LENGTH_LONG);
  2. toast.setGravity(Gravity.CENTER, 0, 0);
  3. toast.show();
复制代码

第一个参数通常用来设置自己的Gravity。第二个和第三个参数定义它相对于第一个参数的偏移量。上述代码的执行结果如下图:




添加一个图片到标准Toast
  为了添加一个图片到标准Toast,你必须创建一个ImageView对象,然后从资源中使用setImageResource方法设置它的图片。然后你要获取标准view(实际上市一个LinearLayout)和添加新创建的ImageView对象给它。你要插入的位置可以进行设置(本例子中使用的是0,所以图片会在文字的上面进行显示)。代码如下

  1. Toast toast = Toast.makeText(getApplicationContext(), "Hello, The Code Project!", Toast.LENGTH_LONG);
  2. toast.setGravity(Gravity.CENTER, 0, 0);
  3. LinearLayout toastView = (LinearLayout) toast.getView();
  4. ImageView imageCodeProject = new ImageView(getApplicationContext());
  5. imageCodeProject.setImageResource(R.drawable.codeprojectlogo);
  6. toastView.addView(imageCodeProject, 0);
  7. toast.show();
复制代码

显示的效果为:

通过自定义Layout创建Toast
  为了创建自定义Layout的Toast,我们需要先创建自定义Layout,代码如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout
  3.     xmlns:android="http://schemas.android.com/apk/res/android"
  4.     android:layout_height="wrap_content" android:layout_width="wrap_content"
  5.     android:background="#ffffffff" android:orientation="vertical"
  6.     android:id="@+id/llToast" >
  7.     <TextView
  8.         android:layout_height="wrap_content"
  9.         android:layout_margin="1dip"
  10.         android:textColor="#ffffffff"
  11.         android:layout_width="fill_parent"
  12.         android:gravity="center"
  13.         android:background="#bb000000"
  14.         android:id="@+id/tvTitleToast" />
  15.     <LinearLayout
  16.         android:layout_height="wrap_content"
  17.         android:orientation="vertical"
  18.         android:id="@+id/llToastContent"
  19.         android:layout_marginLeft="1dip"
  20.         android:layout_marginRight="1dip"
  21.         android:layout_marginBottom="1dip"
  22.         android:layout_width="wrap_content"
  23.         android:padding="15dip"
  24.         android:background="#44000000" >
  25.         <ImageView
  26.             android:layout_height="wrap_content"
  27.             android:layout_gravity="center"
  28.             android:layout_width="wrap_content"
  29.             android:id="@+id/tvImageToast" />
  30.         <TextView
  31.             android:layout_height="wrap_content"
  32.             android:paddingRight="10dip"
  33.             android:paddingLeft="10dip"
  34.             android:layout_width="wrap_content"
  35.             android:gravity="center"
  36.             android:textColor="#ff000000"
  37.             android:id="@+id/tvTextToast" />
  38.     </LinearLayout>
  39. </LinearLayout>
复制代码

我们创建的Toast看起来像一个Dialog,它拥有头部,图片及消息。我们现在需要当创建Toast.的时候设置该Layout。我们也可以设置对话框的标题,消息字符串及图片。下面就是我们做的一些工作:

  1. LayoutInflater inflater = getLayoutInflater();
  2. View layout = inflater.inflate(R.layout.customtoast,
  3.    (ViewGroup) findViewById(R.id.llToast));
  4. ImageView image = (ImageView) layout.findViewById(R.id.tvImageToast);
  5. image.setImageResource(R.drawable.codeprojectlogo);
  6. TextView title = (TextView) layout.findViewById(R.id.tvTitleToast);
  7. title.setText("Attention");
  8. TextView text = (TextView) layout.findViewById(R.id.tvTextToast);
  9. text.setText("Hello, The Code Project!");
  10. Toast toast = new Toast(getApplicationContext());
  11. toast.setGravity(Gravity.RIGHT | Gravity.TOP, 12, 40);
  12. toast.setDuration(Toast.LENGTH_LONG);
  13. toast.setView(layout);
  14. toast.show();
复制代码

最初的两行我们通过解析XML文件(我们使用了LayoutInflater类的实例,通过getLayoutInflater返回)初始化了View对象。第一个参数为Layout的id- R.layout.customToast(它跟 res/layout/customtoast.xml 文件匹配)。然后我们获取了Image的引用,头部标题及消息文本,然后以适当的数据填充他们。最终,我们创建了Toast本身,设置了所有需要的参数及布局(在这里使用了setView方法)。结果我们获得的Toast的显示效果为:


posted @ 2012-09-12 08:15  Liu Siyuan  阅读(674)  评论(0)    收藏  举报