转于:http://blog.csdn.net/jackhenry/article/details/7340278
------------------------------------------------------------------------------------
在Android开发过程中,相信大家对Toast都很熟悉,在一定程度上它可以提高用户体验,比如用户登录浏览器时,浏览器肯定会检测当前设备的网络连接状况,如果当前设备的网络连接是断开的,就可以使用Toast告诉用户,网络初始化失败!让用户检测是否打开数据开关或连接Wifi,如图:
但是这种样式的显示有时候不能满足我们的需求,而且看起来也比较不美观。
然后本人就想重写写个不一样的Toast,再查看了Android的源码后,发现非常简单。
Android源码Toast.java部分代码:
- public static Toast makeText(Context context, CharSequence text, int duration) {
- Toast result = new Toast(context);
- LayoutInflater inflate = (LayoutInflater)
- context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- View v = inflate.inflate(com.android.internal.R.layout.transient_notification, null);
- TextView tv = (TextView)v.findViewById(com.android.internal.R.id.message);
- tv.setText(text);
- result.mNextView = v;
- result.mDuration = duration;
- return result;
- }
-----------------------------------------^-^......直接上代码
新的Toast的layout文件 newtoast.xml:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:gravity="center_vertical"
- android:background="@drawable/btn_bg"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <ImageView
- android:id="@+id/image0"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal"
- />
- <TextView
- android:id="@+id/text0"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal"
- android:textSize="10sp"
- android:textColor="#000"
- />
- </LinearLayout>
新Toast背景 btn_bg.xml:
- <?xml version="1.0" encoding="utf-8"?>
- <shape
- xmlns:android="http://schemas.android.com/apk/res/android">
- <corners
- android:radius="6dp"
- />
- <padding
- android:left="5dp"
- android:top="5dp"
- android:right="5dp"
- android:bottom="5dp"
- />
- <solid
- android:color="#FFFFFF"
- />
- </shape>
NewToast.java:
- public class NewToast extends Toast {
- public NewToast(Context context) {
- super(context);
- }
- public static Toast makeText(Context context, int resId, CharSequence text, int duration) {
- Toast result = new Toast(context);
- //获取LayoutInflater对象
- LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- //由layout文件创建一个View对象
- View layout = inflater.inflate(R.layout.newtoast, null);
- //实例化ImageView和TextView对象
- ImageView imageView = (ImageView) layout.findViewById(R.id.image0);
- TextView textView = (TextView) layout.findViewById(R.id.text0);
- imageView.setImageResource(resId);
- textView.setText(text);
- result.setView(layout);
- result.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
- result.setDuration(duration);
- return result;
- }
- }
main.xml:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <Button
- android:id="@+id/btn0"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/ic_btn_name"
- android:background="@drawable/btn_bg"
- />
- </LinearLayout>
strings.xml:
- <?xml version="1.0" encoding="utf-8"?>
- <resources>
- <string name="app_name">NewToastDemo</string>
- <string name="ic_btn_name">测试按钮</string>
- </resources>
最后来测试一下,MainActivity.java:
- public class MainActivity extends Activity implements OnClickListener {
- //声明一个Button对象
- private Button btn;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- btn = (Button) findViewById(R.id.btn0);
- btn.setOnClickListener(this);
- }
- @Override
- public void onClick(View v) {
- NewToast.makeText(MainActivity.this, R.drawable.prettygirl, "这是一个自定义的Toast!", Toast.LENGTH_SHORT).show();
- }
- }
run app之后,点击按钮,出现如下图所示:
这样一个新的Toast就写好了。
相关推荐
一个简单的自定义Toast资源,您可以根据自己的需要更改我的代码即可实现您想要的效果(主要是更改xml文件的布局),这是androidstudio的项目,但是不妨碍在eclipse中使用,可以直接在eclipse中新建android项目,然后将...
"Android应用源码之自定义彩色Toast.zip"这个压缩包文件很可能是提供了一个示例项目,展示了如何在Android应用中实现自定义彩色Toast的功能。 自定义彩色Toast涉及的关键知识点包括: 1. **理解Toast的工作原理**...
Android 自定义 Toast ...在 Android 开发中,自定义 Toast 的显示时间是一个非常重要的功能,可以满足不同的应用场景需求。使用 WindowManager 可以实现自定义 Toast 的显示时间,并提供了更加灵活的 Toast 显示方式。
在Android开发中,Toast是一种轻量级的通知方式,它用于显示短暂的信息,通常用来提示用户某个操作的结果。然而,Android系统默认的Toast是黑色文本在白色背景上,颜色比较单一。在某些设计需求下,开发者可能需要...
Android应用源码之自定义彩色Toast.zip项目安卓应用源码下载Android应用源码之自定义彩色Toast.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
在Android应用开发中,`Toast`是常用的轻量级提示组件,用于向用户展示短暂的信息。默认情况下,`Toast`的样式和位置都是系统固定的,但开发者可以根据需求自定义其样式和显示位置,以增强用户体验。本文将详细介绍...
在Android开发中,自定义Dialog和Toast是提升用户体验和界面个性化的重要手段。Dialog通常用于向用户展示重要信息或需要用户做出决策的情况,而Toast则用于轻量级的通知,不打断用户的当前操作。以下是对如何自定义...
在Android开发中,`Toast`是一种轻量级的提示方式,用于向用户显示短暂的信息,如操作结果或者简单的提示。通常,`Toast`会显示一个简单的文本消息,但默认样式可能无法满足所有设计需求。本篇文章将深入探讨如何在...
在Android应用开发中,Toast是一种常用的轻量级提示方式,用于短暂显示消息,告知用户一些信息或者操作结果。然而,系统默认的Toast虽然方便,但其样式和功能相对固定,不能满足所有开发者的需求。在某些情况下,...
在Android应用开发中,自定义彩色Toast是一种常见且实用的技术,它可以让你的应用在提示信息上更具个性化和吸引力。本文将深入探讨如何通过源码实现这一功能,并将其应用于毕业设计项目中。 首先,我们需要理解...
在Android开发中,自定义Dialog和Toast是提升用户体验和界面个性化的重要手段。Dialog通常用于向用户展示临时信息或需要用户做出决策的情况,而Toast则用于轻量级的通知,它们都会在一段时间后自动消失。本篇将详细...
在Android开发中,`Toast`是一个非常常用的组件,它用于在界面上显示短暂的通知信息,不会影响用户与屏幕上的其他元素交互。`Toast`对象的使用主要包括基本用法和自定义实现,下面将详细讲解这两个方面。 ### 基本...
在Android开发中,Toast是一种轻量级的通知方式,它用于显示短暂的信息,通常用来提示用户...在进行自定义Toast开发时,一定要确保对Android的UI组件和生命周期有深入的理解,这将有助于你编写出更加高效和美观的代码。
总的来说,自定义Toast在Android开发中具有很高的灵活性,可以根据应用场景和用户体验需求进行个性化设计。无论是调整位置还是改变样式,都可以通过简单的代码实现,极大地丰富了应用的交互体验。
在Android开发中,Toast是一种轻量级的通知方式,它能够在屏幕中央短暂地显示一行文本信息。然而,系统默认的Toast功能有限,仅提供简单的文本显示和预设的显示位置。当我们需要更复杂的交互或者定制化设计时,就...
总之,自定义Toast是Android开发中的一个重要技巧,它允许开发者根据应用的需求提供更丰富的用户体验。通过修改位置、添加图片以及应用各种视觉效果,我们可以让Toast成为与用户交互的一种强大工具。在实际开发中,...
在Android开发中,Toast是一种轻量级的通知方式,它会在屏幕底部短暂显示一条信息,然后自动消失。然而,系统默认的Toast通常是白色文字背景黑色,样式单一。在某些情况下,开发者可能希望创建自定义的Toast,以匹配...
当开发自定义Toast时,要确保代码对不同版本的Android系统具有良好的兼容性。例如,某些API级别的特性可能在低版本系统上不可用,需要进行条件判断或使用兼容库。 8. **多线程问题** 注意,Toast操作应在主线程中...
/* 显示toast,自己定义显示长短。 * param1:activity 传入context * param2:word 我们需要显示的toast的内容 * param3:time length long类型,我们传入的时间长度(如500)*/