`

Android软件开发之 自定义别样Toast

 
阅读更多

转于:http://blog.csdn.net/jackhenry/article/details/7340278

------------------------------------------------------------------------------------

 

 在Android开发过程中,相信大家对Toast都很熟悉,在一定程度上它可以提高用户体验,比如用户登录浏览器时,浏览器肯定会检测当前设备的网络连接状况,如果当前设备的网络连接是断开的,就可以使用Toast告诉用户,网络初始化失败!让用户检测是否打开数据开关或连接Wifi,如图:

 

但是这种样式的显示有时候不能满足我们的需求,而且看起来也比较不美观。

然后本人就想重写写个不一样的Toast,再查看了Android的源码后,发现非常简单。

Android源码Toast.java部分代码:

[java] view plaincopy
 
  1. public static Toast makeText(Context context, CharSequence text, int duration) {  
  2.     Toast result = new Toast(context);  
  3.       LayoutInflater inflate = (LayoutInflater)  
  4.              context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
  5.       View v = inflate.inflate(com.android.internal.R.layout.transient_notification, null);  
  6.       TextView tv = (TextView)v.findViewById(com.android.internal.R.id.message);  
  7.       tv.setText(text);  
  8.   
  9.          
  10.       result.mNextView = v;  
  11.       result.mDuration = duration;  
  12.   
  13.       return result;  
  14. }  

 

-----------------------------------------^-^......直接上代码

新的Toast的layout文件 newtoast.xml:

[html] view plaincopy
 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout  
  3.   xmlns:android="http://schemas.android.com/apk/res/android"  
  4.   android:orientation="vertical"  
  5.   android:gravity="center_vertical"  
  6.   android:background="@drawable/btn_bg"  
  7.   android:layout_width="fill_parent"  
  8.   android:layout_height="fill_parent">  
  9.   <ImageView   
  10.     android:id="@+id/image0"  
  11.     android:layout_width="wrap_content"  
  12.     android:layout_height="wrap_content"  
  13.     android:layout_gravity="center_horizontal"  
  14.     />  
  15.   <TextView   
  16.     android:id="@+id/text0"  
  17.     android:layout_width="wrap_content"  
  18.     android:layout_height="wrap_content"  
  19.     android:layout_gravity="center_horizontal"  
  20.     android:textSize="10sp"  
  21.     android:textColor="#000"  
  22.     />  
  23.       
  24. </LinearLayout>  

 

新Toast背景 btn_bg.xml:

[html] view plaincopy
 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <shape  
  3.   xmlns:android="http://schemas.android.com/apk/res/android">  
  4.     <corners   
  5.         android:radius="6dp"  
  6.         />  
  7.     <padding   
  8.         android:left="5dp"  
  9.         android:top="5dp"  
  10.         android:right="5dp"  
  11.         android:bottom="5dp"  
  12.         />  
  13.     <solid   
  14.         android:color="#FFFFFF"  
  15.         />  
  16. </shape>  

 

NewToast.java:

[java] view plaincopy
 
  1. public class NewToast extends Toast {  
  2.   
  3.     public NewToast(Context context) {  
  4.         super(context);  
  5.     }  
  6.       
  7.     public static Toast makeText(Context context, int resId, CharSequence text, int duration) {  
  8.         Toast result = new Toast(context);  
  9.           
  10.         //获取LayoutInflater对象  
  11.         LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);   
  12.         //由layout文件创建一个View对象  
  13.         View layout = inflater.inflate(R.layout.newtoast, null);  
  14.           
  15.         //实例化ImageView和TextView对象  
  16.         ImageView imageView = (ImageView) layout.findViewById(R.id.image0);  
  17.         TextView textView = (TextView) layout.findViewById(R.id.text0);  
  18.           
  19.         imageView.setImageResource(resId);  
  20.         textView.setText(text);  
  21.           
  22.         result.setView(layout);  
  23.         result.setGravity(Gravity.CENTER_VERTICAL, 00);  
  24.         result.setDuration(duration);  
  25.           
  26.         return result;  
  27.     }  
  28.   
  29. }  


main.xml:

[html] view plaincopy
 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7. <Button    
  8.     android:id="@+id/btn0"  
  9.     android:layout_width="wrap_content"   
  10.     android:layout_height="wrap_content"   
  11.     android:text="@string/ic_btn_name"  
  12.     android:background="@drawable/btn_bg"  
  13.     />  
  14. </LinearLayout>  


strings.xml:

 

[html] view plaincopy
 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <string name="app_name">NewToastDemo</string>  
  4.     <string name="ic_btn_name">测试按钮</string>  
  5. </resources>  

最后来测试一下,MainActivity.java:

[java] view plaincopy
 
  1. public class MainActivity extends Activity implements OnClickListener {  
  2.       
  3.     //声明一个Button对象  
  4.     private Button btn;  
  5.     @Override  
  6.     public void onCreate(Bundle savedInstanceState) {  
  7.         super.onCreate(savedInstanceState);  
  8.         setContentView(R.layout.main);  
  9.           
  10.         btn = (Button) findViewById(R.id.btn0);  
  11.         btn.setOnClickListener(this);  
  12.     }  
  13.     @Override  
  14.     public void onClick(View v) {  
  15.         NewToast.makeText(MainActivity.this, R.drawable.prettygirl, "这是一个自定义的Toast!", Toast.LENGTH_SHORT).show();  
  16.     }  
  17. }  


run app之后,点击按钮,出现如下图所示:

这样一个新的Toast就写好了。

分享到:
评论

相关推荐

    android开发之自定义Toast

    一个简单的自定义Toast资源,您可以根据自己的需要更改我的代码即可实现您想要的效果(主要是更改xml文件的布局),这是androidstudio的项目,但是不妨碍在eclipse中使用,可以直接在eclipse中新建android项目,然后将...

    Android应用源码之自定义彩色Toast.zip

    "Android应用源码之自定义彩色Toast.zip"这个压缩包文件很可能是提供了一个示例项目,展示了如何在Android应用中实现自定义彩色Toast的功能。 自定义彩色Toast涉及的关键知识点包括: 1. **理解Toast的工作原理**...

    android自定义Toast设定显示时间

    Android 自定义 Toast ...在 Android 开发中,自定义 Toast 的显示时间是一个非常重要的功能,可以满足不同的应用场景需求。使用 WindowManager 可以实现自定义 Toast 的显示时间,并提供了更加灵活的 Toast 显示方式。

    Android例子源码自定义彩色Toast

    在Android开发中,Toast是一种轻量级的通知方式,它用于显示短暂的信息,通常用来提示用户某个操作的结果。然而,Android系统默认的Toast是黑色文本在白色背景上,颜色比较单一。在某些设计需求下,开发者可能需要...

    Android应用源码之自定义彩色Toast.zip项目安卓应用源码下载

    Android应用源码之自定义彩色Toast.zip项目安卓应用源码下载Android应用源码之自定义彩色Toast.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考

    Android-Android实现Toast自定义样式

    在Android应用开发中,`Toast`是常用的轻量级提示组件,用于向用户展示短暂的信息。默认情况下,`Toast`的样式和位置都是系统固定的,但开发者可以根据需求自定义其样式和显示位置,以增强用户体验。本文将详细介绍...

    android自定义dialog和Toast

    在Android开发中,自定义Dialog和Toast是提升用户体验和界面个性化的重要手段。Dialog通常用于向用户展示重要信息或需要用户做出决策的情况,而Toast则用于轻量级的通知,不打断用户的当前操作。以下是对如何自定义...

    Android Toast 自定义背景、图片 随心使用

    在Android开发中,`Toast`是一种轻量级的提示方式,用于向用户显示短暂的信息,如操作结果或者简单的提示。通常,`Toast`会显示一个简单的文本消息,但默认样式可能无法满足所有设计需求。本篇文章将深入探讨如何在...

    Android应用源码之自定义彩色Toast-IT计算机-毕业设计.zip

    在Android应用开发中,自定义彩色Toast是一种常见且实用的技术,它可以让你的应用在提示信息上更具个性化和吸引力。本文将深入探讨如何通过源码实现这一功能,并将其应用于毕业设计项目中。 首先,我们需要理解...

    android自定义Dialog、Toast

    在Android开发中,自定义Dialog和Toast是提升用户体验和界面个性化的重要手段。Dialog通常用于向用户展示临时信息或需要用户做出决策的情况,而Toast则用于轻量级的通知,它们都会在一段时间后自动消失。本篇将详细...

    android Toast对象的使用 自定义Toast

    在Android开发中,`Toast`是一个非常常用的组件,它用于在界面上显示短暂的通知信息,不会影响用户与屏幕上的其他元素交互。`Toast`对象的使用主要包括基本用法和自定义实现,下面将详细讲解这两个方面。 ### 基本...

    android自定义时长Toast

    在Android开发中,Toast是一种轻量级的通知方式,它用于显示短暂的信息,通常用来提示用户...在进行自定义Toast开发时,一定要确保对Android的UI组件和生命周期有深入的理解,这将有助于你编写出更加高效和美观的代码。

    自定义Toast,设置Toast显示位置,自定义Toast的复杂布局

    在Android开发中,Toast是一种轻量级的通知方式,它能够在屏幕中央短暂地显示一行文本信息。然而,系统默认的Toast功能有限,仅提供简单的文本显示和预设的显示位置。当我们需要更复杂的交互或者定制化设计时,就...

    android默认Toast,各种自定义Toast

    总的来说,自定义Toast在Android开发中具有很高的灵活性,可以根据应用场景和用户体验需求进行个性化设计。无论是调整位置还是改变样式,都可以通过简单的代码实现,极大地丰富了应用的交互体验。

    Android-自定义Toast解决系统Toast存在的问题

    在Android应用开发中,Toast是一种常用的轻量级提示方式,用于短暂显示消息,告知用户一些信息或者操作结果。然而,系统默认的Toast虽然方便,但其样式和功能相对固定,不能满足所有开发者的需求。在某些情况下,...

    Android中自定义Toast.pdf

    总之,自定义Toast是Android开发中的一个重要技巧,它允许开发者根据应用的需求提供更丰富的用户体验。通过修改位置、添加图片以及应用各种视觉效果,我们可以让Toast成为与用户交互的一种强大工具。在实际开发中,...

    安卓开发-自定义彩色Toast.zip

    在Android开发中,Toast是一种轻量级的通知方式,它会在屏幕底部短暂显示一条信息,然后自动消失。然而,系统默认的Toast通常是白色文字背景黑色,样式单一。在某些情况下,开发者可能希望创建自定义的Toast,以匹配...

    Android高级应用源码-自定义彩色Toast.zip

    当开发自定义Toast时,要确保代码对不同版本的Android系统具有良好的兼容性。例如,某些API级别的特性可能在低版本系统上不可用,需要进行条件判断或使用兼容库。 8. **多线程问题** 注意,Toast操作应在主线程中...

    android 自定义修改toast显示时间

    /* 显示toast,自己定义显示长短。 * param1:activity 传入context * param2:word 我们需要显示的toast的内容 * param3:time length long类型,我们传入的时间长度(如500)*/

Global site tag (gtag.js) - Google Analytics