`

Toast的使用

阅读更多
Toast的基本原理其实就是将一个View添加到WindowManager中,让WindowManager来把View显示出来。(WindowManager可以将View显示在任何地方,任何Activity之上)


Toast的默认属性
// 对其方式为:水平居中,并在底部
mGravity = Gravtiy.CENTER_HORIZONTAL | Gravtiy.BOTTOM;

mX = 0;
mY =context.getResources().getDimensionPixelSize(com.android.internal.R.dimen.toast_y_offset);

mHorizontalMargin = 0;
mVerticalMargin = 0;

所以用Toast.makeText(getApplicationContext(), R.string.text, Toast.LENGTH_SHORT).show();生成的Toast总是处在底部水平居中的位置



在指定x, y处显示Toast
// 在(50, 100)处显示Toast
Toast toast = Toast.makeText(getApplicationContext(), "toast use", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.TOP | Gravity.LEFT, 50, 100);
toast.show();

// 如果使用Gravity.NO_GRAVITY,后面的x, y就是相对于屏幕的中心点的(估计android是默认这么处理的)
Toast toast = Toast.makeText(getApplicationContext(), "toast use", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.NO_GRAVITY, 50, 100);
toast.show();

// 用margin来控制toast的位置
Toast toast = Toast.makeText(getApplicationContext(), "toast use", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.LEFT | Gravity.TOP, 0, 0);
// leftMargin, topMargin分别是容器width, height的%多少(这里是10%和20%)
toast.setMargin(0.1F, 0.2F);
toast.show();



指定View的Toast
// 布局xml:R.layout.toast
< Button
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:id="@android:id/message"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content" />


Toast toast = new Toast(getApplicationContext());
toast.setView(LayoutInflater.from(getApplicationContext()).inflate(R.layout.toast, null));
toast.setText("toast use");
// Button是否fill_parent是由gravity控制的, xml中的不起任何作用
toast.setGravity(toast.getGravity() | Gravity.FILL_HORIZONTAL, 
	toast.getXOffset(), toast.getYOffset());
toast.setDuration(Toast.LENGTH_SHORT);
toast.show();

Toast部分源码
// Toast的构造器只设置了mY这个属性。mNextView, mDuration都没有设置(用makeText的话,这两个属性会设置)
public Toast(Context context) {
	mContext = context;
	mTN = new TN();
	mY = context.getResources().getDimensionPixelSize(com.android.internal.R.dimen.toast_y_offset);
}

// setText方法,需要将显示text的view的id设为@android:id/message,否则会抛RuntimeException
public void setText(CharSequence s) {
	if (mNextView == null) {
		throw new RuntimeException("This Toast was not created with Toast.makeText()");
	}
	TextView tv = (TextView) mNextView.findViewById(com.android.internal.R.id.message);
	if (tv == null) {
		throw new RuntimeException("This Toast was not created with Toast.makeText()");
	}
	tv.setText(s);
}




一直显示的Toast
实现原理是:在Toast隐藏之前,再show一个相同的Toast,来实现长显示的假象
private class ToastWrapper {
	private Toast mToast;
	
	private Handler mHandler;
	
	private Runnable mShowToast = new Runnable() {
		@Override
		public void run() {
			continueShow();
		}
	};
	
	private boolean mCancelled = true;
	
	public ToastWrapper(Context ctxt) {
		this(ctxt, new Handler());
	}
	
	public ToastWrapper(Context ctxt, Handler handler) {
		mToast = Toast.makeText(ctxt, null, Toast.LENGTH_SHORT);
		mHandler = handler;
	}
	
	public Toast getToast() {
		return mToast;
	}
	
	public void showUntilCancel() {
		if (mCancelled) {
			mCancelled = false;
			mToast.setDuration(Toast.LENGTH_LONG);
			continueShow();
		}
	}
	
	public void cancel() {
		mCancelled = true;
		mToast.cancel();
	}
	
	private void continueShow() {
		if (mCancelled) {
			return;
		}
		mToast.show();
		mHandler.postDelayed(mShowToast, 3000);
	}
}

使用ToastWrapper
// 一直显示的toast
toastWrapper = new ToastWrapper(getApplicationContext());
Toast toast = toastWrapper.getToast();
toast.setText("toast wrapper");

// ...

Button button = new Button(getApplicationContext());
button.setText("一直显示toast");
button.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View view) {
		toastWrapper.showUntilCancel();
	}
});

Button button = new Button(getApplicationContext());
button.setText("隐藏toast");
button.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View view) {
		toastWrapper.cancel();
	}
});



// 一搬的toast
Button button = new Button(getApplicationContext());
button.setText("一般的toast");
button.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View view) {
		Toast toast = toastWrapper.getToast();
		toast.setDuration(Toast.LENGTH_SHORT);
		toast.show();
	}
});
分享到:
评论

相关推荐

    Toast使用

    【标题】:“Toast使用” 在Android开发中,`Toast`是一种常见的用户反馈机制,用于向用户展示短暂的信息提示,如操作成功、失败或其他提示性消息。`Toast`不会占用屏幕空间,也不会阻碍用户与界面的交互,是...

    Menu和Toast使用Demo

    在Android Studio中创建一个包含Menu和Toast使用的Demo,你需要: 1. 创建一个新的Android项目。 2. 在`res/menu`目录下创建`menu_main.xml`文件,定义菜单项。 3. 在主Activity(如`MainActivity.java`)中重写`...

    toast 使用

    `Toast`通常在用户触发某个事件但不需要长时间反馈或不需要跳转到新界面时使用,比如点击按钮后显示“操作成功”等简短消息。 **一、`Toast`的基本用法** 创建`Toast`对象并显示消息,可以分为以下几个步骤: 1. ...

    Toast的基本使用代码

    在本篇中,我们将深入探讨`Toast`的基本使用,对应于2.1章节中的`Toast`介绍。 首先,要创建并显示一个`Toast`,你需要先获得`Context`对象,通常是在`Activity`或`Fragment`中。`Context`是Android系统中非常基础...

    JQuery信息提示框插件 jquery.toast.js 的使用

    3. **创建提示**:使用 `.toast('message')` 创建一个简单的提示,或者使用 `.toast(options)` 接受一个配置对象来创建更复杂的提示。 - `options` 可能包含: - `type`:提示类型,如 `'success'`、`'warning'`、...

    Toast使用大全(附源码)

    本篇文章将深入探讨`Toast`的使用方法,包括基本用法、自定义样式以及源码解析,帮助开发者更好地理解和运用`Toast`。 ### 1. 基本用法 `Toast`的基本用法非常简单,通常通过`Toast.makeText()`方法创建一个`Toast...

    android默认Toast,各种自定义Toast

    默认的Toast使用非常简单,只需要调用`Toast.makeText()`方法即可。例如: ```java Toast.makeText(context, "这是一个默认的Toast", Toast.LENGTH_SHORT).show(); ``` 这里的`context`是上下文对象,可以是...

    androidToast大全(五种情形)[归类].pdf

    通过上述五种不同情形的介绍,可以看出Android Toast的使用非常灵活,可以根据不同的需求场景选择合适的Toast使用方式,从而提升应用的用户体验。在实际开发中,开发人员可以根据具体的应用需求,选择合适的Toast...

    【mac】dvd光盘刻录 Roxio Toast Titanium 17.4.dmg

    【mac】dvd光盘刻录 Roxio Toast Titanium 17.4.dmg,安装即用

    安卓Android源码——五种不同的Toast效果.zip

    1. **基础的Toast使用** - Android中的Toast是通过`Toast.makeText()`方法创建的。这个方法接收三个参数:上下文(Context)、显示的消息(String)和持续时间(int,可以是`Toast.LENGTH_SHORT`或`Toast.LENGTH_...

    Toast-five-different-effect.zip_Toast

    1. **基本的Toast使用**: Android中的`Toast`类用于创建和显示简单的消息。要创建一个Toast,首先需要实例化一个`Toast`对象,然后调用其`makeText()`方法,传入上下文(通常是Activity或ApplicationContext)、要...

    五种不同的Toast效果

    1. **基本的Toast使用** 基本的`Toast`创建非常简单,只需要调用`Toast.makeText()`方法,传入上下文、显示的消息文本以及持续时间。例如: ```java Toast.makeText(context, "这是基本的Toast", Toast.LENGTH_...

    自定义彩色Toast.zip

    5. Toast的使用:复习标准的Toast使用方式,以及如何通过`Toast.makeText()`方法创建和显示基本的Toast。 6. 动画效果:自定义Toast可能会包含动画效果,例如淡入淡出,这涉及对Android动画API的理解。 7. Java...

    Toast自定义布局

    Toast自定义布局实现炫酷效果

    android Toast对象的使用 自定义Toast

    `Toast`对象的使用主要包括基本用法和自定义实现,下面将详细讲解这两个方面。 ### 基本用法 1. **创建Toast对象**:首先,你需要通过`Context`的`makeText()`方法来创建一个`Toast`对象,传入上下文、消息文本和...

    android Toast大全

    ### Android Toast 使用详解 在Android开发中,`Toast`是一种非常常见的消息提示方式,它能够以弹出框的形式快速地向用户展示一条简短的消息。本文将基于一份关于`Toast`使用的总结,详细介绍五种不同的`Toast`实现...

    IOS Toast的使用

    在iOS开发中,"Toast"通常指的是短暂显示在屏幕上的提示信息,用于向用户传达一些非阻塞式的通知或信息。这种设计模式源自Android...在iPad这样的大屏幕设备上,合理使用Toast能够有效提高用户交互的清晰度和便捷性。

    安卓开发-五种效果的Toast.zip

    1. **基本的Toast使用** - 创建`Toast`最简单的方式是通过`Toast.makeText()`方法,传入上下文(Context)、显示的文本和持续时间(短时间SHORT 或 长时间LONG)。 - 示例代码: ```java Toast.makeText(context...

    Android应用源码之五种效果的Toast.zip

    1. **基本的Toast使用**:首先,我们要理解Android系统提供的默认Toast。通过`Toast.makeText()`方法创建一个基本的Toast,传入上下文、消息文本以及持续时间(短时间或长时间)。 ```java Toast toast = Toast....

    安卓开发-五种不同的Toast效果.zip

    1. **基本的Toast使用** - `Toast.makeText()`是创建`Toast`对象的基本方法,它接收三个参数:上下文(Context)、要显示的文本(String)和持续时间(int)。持续时间可以是`Toast.LENGTH_SHORT`或`Toast.LENGTH_...

Global site tag (gtag.js) - Google Analytics