`

Android中如何自己定义Toast

 
阅读更多

转于:http://www.bkjia.com/Androidjc/882037.html

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

Android中如何自己定义吐司(Toast),androidtoast

 

Android系统里面有个东西很好用,也很常用,那就是Toast,但是长期使用也会发现,Toast有他的不足之处:形式单一,只有文字,风格不变等等,那么要如何自定义一个Toast呢,我们可以先从分析Android定义Toast的代码着手:

Toast的makeText方法

 

 

 

 

这里实际上Android所做的工作是将Toast显示的文本和持续时间设置了一下,然后返回了Toast对象,用以执行show()方法。这里核心的地方是要弄明白 

 

这一句Android做了一些什么工作,下面我们继续看:

 

这里实际上是new 了一个TN()对象,然后对TN对象设置了一些关于位置和偏移的参数。那么那个TN是何方神圣呢?我们可以继续往下看:

 

 

我们可以发现,TN的构造函数里面执行了一个handleShow的方法

 

 

我们可以发现handleshow这个方法执行了一大堆的语句,但是实际上我们需要重点关注的只有一句,也就是上面选中的一句:mWM.addView(mView,mParams);

 

实际上这个mWM是一个WindowManager,mView是要显示的组件的view,而mParams应该是参数的设置一类,但是具体是何方神圣呢?我们可以在Toast类中找到一个成员变量

 

我们发现mParams实际上是WindowManager的一个布局参数。但是如果单从handleShow方法来看mParams的设置感觉还是太乱,我们可以在Toast中找到下面这一段

 

 

在这里我们可以比较清楚看到mParams的一部分主要参数设置,其中包含了长宽都是wrap_content,然后是半透明的(TransLucent),然后还设置了一个动画效果(Animation_Toast),和一个标题(setTitle("Toast"))最后设置了Toast一些标识比如让屏幕亮起,不可触摸,不可获取焦点等。

 

到这里,我们基本上清楚了Toast是如何显示出来的,核心的在于使用一个WindowManager的addView方法,将要显示的view和参数mParams传进来,但是在此之前还需要设置mParams的一些参数;

 

那么这里是显示,Toast是如何让显示消失的呢?我们可以在handleShow方法下面找到一个handHide的方法

 

 

同样核心语句也是选中的一句,mWM.removeView(mView),这样就让Toast消失掉了

 

那么有了上面的一些分析,我们不难写出我们自己的Toast类,里面提供一些静态方法,让我们来自己定义Toast的显示风格和显示内容,也可以控制Toast的显示开始和结束的时机。

下面的自定义Toast类,提供了几种形式的show方法,可以像传统Toast一样,传入文本来显示一个testview,也可以完全自己定义传入view对象和mParams参数,这样可以定义出了一个完全自己定义的Toast

 

 

package com.alexchen.mobilesafeexercise.ui;

import android.content.Context;
import android.graphics.PixelFormat;
import android.view.View;
import android.view.WindowManager;
import android.widget.TextView;
import android.widget.Toast;

/**
 * 自定义吐司
 * 
 * @author Alex
 * 
 */
public class MyToast {
	/**
	 * 窗体管理者
	 */
	private static WindowManager wm;
	private static WindowManager.LayoutParams mParams = new WindowManager.LayoutParams();
	private static View mView;
	private static TextView tv;

	/**
	 * 显示自定义吐司
	 * 
	 * @param info
	 * @param context
	 */
	public static void show(String message, Context context) {
		wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
		tv = new TextView(context);
		tv.setText(message);
		tv.setTextSize(20);
		// 原来TN所做的工作
		WindowManager.LayoutParams params = mParams;
		params.height = WindowManager.LayoutParams.WRAP_CONTENT;
		params.width = WindowManager.LayoutParams.WRAP_CONTENT;
		params.format = PixelFormat.TRANSLUCENT;
		params.type = WindowManager.LayoutParams.TYPE_TOAST;
		params.setTitle("Toast");
		params.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
				| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
				| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;

		wm.addView(tv, params);

	}

	/**
	 * 自定义文本吐司的显示方法,这个方法提供了更多自定义的内容,比如textview可以应用一个传入的style的id
	 * 
	 * @param message
	 * @param context
	 * @param textViewResid
	 * @param params
	 */
	public static void show(String message, Context context, int textViewResid,
			WindowManager.LayoutParams params) {
		wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
		tv = new TextView(context);
		// 多加了一个风格
		tv.setTextAppearance(context, textViewResid);
		// 原来TN所做的工作
		// WindowManager.LayoutParams params = mParams;
		// params.height = WindowManager.LayoutParams.WRAP_CONTENT;
		// params.width = WindowManager.LayoutParams.WRAP_CONTENT;
		// params.format = PixelFormat.TRANSLUCENT;
		// params.type = WindowManager.LayoutParams.TYPE_TOAST;
		// params.setTitle("Toast");
		// params.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
		// | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
		// | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;

		wm.addView(tv, params);
	}

	/**
	 * 更多自定义的形式,可以直接传入任一个自己定义好的view,自己设置wm的参数
	 * 
	 * @param view
	 * @param context
	 * @param params
	 *            WindowManager.LayoutParams类型的参数, WindowManager.LayoutParams
	 *            mParams = new WindowManager.LayoutParams(); params.height =
	 *            WindowManager.LayoutParams.WRAP_CONTENT; params.width =
	 *            WindowManager.LayoutParams.WRAP_CONTENT; params.format =
	 *            PixelFormat.TRANSLUCENT; params.type =
	 *            WindowManager.LayoutParams.TYPE_TOAST;
	 *            params.setTitle("Toast"); params.flags =
	 *            WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
	 *            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
	 *            WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
	 */
	public static void show(View view, Context context,
			WindowManager.LayoutParams params) {
		wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
		MyToast.mView = view;
		wm.addView(mView, params);

	}

	/**
	 * 隐藏自定义吐司 这里一定要记得判空一下,因为平时没有打电话时,这两个量应该都是空的
	 */
	public static void hide() {
		if (wm != null) {
			if (tv != null) {

				wm.removeView(tv);

				tv = null;
			}
			if (mView != null) {

				wm.removeView(mView);

				mView = null;
			}
			if (tv == null && mView == null) {
				wm = null;
			}

		}
	}

}



 

 

 

android的toast怎自定义显示时间长度?

 

只有long 和shot两种模式。。
 

android的toast怎自定义显示时间长度?

 

可以,利用反射机制强行修好显示时间

分享到:
评论

相关推荐

    android 带颜色的Toast效果+Toast位置设置

    在Android开发中,`Toast`是一种轻量级的提示机制,用于向用户显示短暂的信息,通常用于反馈操作结果或提供简单通知。默认情况下,`Toast`具有统一的背景颜色和文字样式,但开发者可以根据需求自定义其外观,比如...

    Android-Android实现Toast自定义样式

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

    android自定义dialog和Toast

    1. **创建布局文件**:与Dialog类似,我们可以创建一个XML布局文件,用于定义Toast的外观。布局可以包含文字、图片等元素。 2. **自定义ViewToast类**:创建一个类,它将负责创建和显示自定义的Toast。这个类需要...

    android自定义时长Toast

    1. **创建布局文件**:首先,我们需要创建一个XML布局文件,用于定义Toast显示的内容和样式。例如,`res/layout/custom_toast.xml`: ```xml <LinearLayout xmlns:android=...

    android默认Toast,各种自定义Toast

    在Android开发中,Toast是一种轻量级的通知方式,它用于显示短暂的信息,不会阻断用户当前的操作。默认的Toast在屏幕中央短暂显示文本信息,但有时开发者可能需要更灵活的展示方式,比如改变位置或样式,这就涉及到...

    android自定义Dialog、Toast

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

    android service toast 01

    然而,Service通常运行在自己的工作线程中,这意味着在Service中直接使用Toast可能会导致`android.view.ViewRootImpl$CalledFromWrongThreadException`异常。为了解决这个问题,有以下两种常见方法: 1. 使用`...

    Qt仿Android的toast控件效果

    1. **定义Toast类**:创建一个新的Qt Widget类,命名为`Toast`,继承自`QWidget`。在这个类中,我们需要设置控件的基本属性,如大小、颜色、字体等,以达到类似Android toast的效果。 2. **设计UI**:使用Qt ...

    Android 5.0以上Toast不显示的解决方法

    原因分析 用户使用android 5.0以上的系统...既然系统不允许我们调用Toast,那么我们就自立门户——自己写一个Toast出来。我们总体的思路是:在Activity的布局中添加View实现Toast的效果。 Toast背景shape定义 我们知道

    Android-自定义toast提示可设置做了封装

    在Android应用开发中,系统默认的Toast提示虽然简单易用,但往往无法满足开发者对于个性化提示的需求。为了提供更丰富的提示效果和更好的用户体验,开发者常常会选择自定义Toast。本资源"Android-自定义toast提示可...

    PhoneGap android的Toast插件

    例如,`execute`方法可能接受一个字符串参数,这个参数就是显示在Toast中的文本内容。然后,它会使用Android的`Toast.makeText`方法来创建并显示Toast。 `Toast.makeText`方法通常包括三个参数:上下文(Context)...

    Android学习笔记之Button,Toast,menu的简单用法

    在Android开发中,Button、Toast和Menu是三个非常基础且重要的组件,它们为用户界面提供了交互性和反馈。这篇学习笔记将详细介绍这三个元素的使用方法。 首先,Button是Android中的一个视图控件,用于接收用户的...

    自定义Application级别toast Demo

    比如,我们可以创建一个XML布局文件来定义Toast的视图,包含文本和可能的图标: ```xml <!-- res/layout/custom_toast.xml --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"> ...

    Android中Toast的定义与作用.pdf

    在Android开发中,Toast是一种非常常见的用户界面组件,用于向用户显示短暂的提示信息,而不会中断当前应用程序的运行流程。这个组件非常适合在用户进行某项操作后提供反馈或者简单的通知,因为它会在屏幕上的某个...

    android 自定义修改toast显示时间

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

    Android中Toast和Notification的应用.

    在Android应用开发中,`Toast`和`Notification`是两种重要的用户反馈机制,它们用于向用户展示临时或持久的信息。让我们深入探讨这两种机制的工作原理、使用场景和实现方法。 首先,`Toast`是一种轻量级的提示方式...

    Android中实现带声音提示的Toast (自定义扩展Toast)

    在Android开发中,常规的`Toast`用于短暂地显示一些简短的信息,但不支持声音提示。为了在用户界面交互时增加声音反馈,我们需要自定义一个扩展版的`Toast`,使其不仅显示文本,还能播放预设的声音。下面将详细介绍...

    android Toast大全(五种情形)

    在Android开发中,`Toast`是一种轻量级的提示方式,主要用于快速显示简短的信息,如操作结果、临时提示等。它不会阻塞UI线程,也不需要用户进行任何交互即可自动消失。本文将详细介绍五种创建`Toast`的方法,帮助...

    android的Toast提示框优化

    在Android应用开发中,`Toast` 是一种常用的轻量级提示方式,用于向用户显示短暂的信息,不打断用户的操作流程。然而,系统默认的`Toast`实现可能存在一些限制,如样式单一、显示时间不可自定义等。为了提供更好的...

    Android例子源码自定义彩色Toast

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

Global site tag (gtag.js) - Google Analytics