安卓Toast是一种简单的提示框,能够在屏幕上显示一段短暂的信息,通常用于展示用户操作结果、进度提示等。然而,标准的Toast展示效果比较单一,无法满足用户自定义的需求,而且常常出现重复显示的问题。针对这种情况,我们需要使用自定义Toast,并且对其进行防止重复显示的处理。
一、自定义Toast
安卓系统中提供了默认的Toast,可是样式比较简单,无法满足应用开发中的需求,因此我们需要定义自己的Toast。以下是自定义Toast的步骤:
1. 新建XML布局文件
在res/layout目录下新建一个XML文件,例如toast_custom.xml,用于定义Toast的布局。
2. 编写XML文件代码
对于自定义Toast的布局,可以使用LinearLayout、RelativeLayout等布局,注意控件显示顺序,可以自行设计布局。
例如:
```xml
android:layout_width="match_parent" android:layout_height="match_parent"> android:layout_width="60dp" android:layout_height="60dp" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="20dp" android:src="@drawable/icon"/> android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_toRightOf="@id/image" android:text="This is a custom Toast" android:textColor="@android:color/white" android:textSize="14sp"/>
```
3. 使用LayoutInflater加载布局
在需要使用自定义Toast的地方,一般是在Activity或者Fragment中,使用LayoutInflater从XML文件中加载布局。
例如:
```java
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.toast_custom, null);
ImageView image = (ImageView) layout.findViewById(R.id.image);
TextView text = (TextView) layout.findViewById(R.id.text);
image.setImageResource(R.drawable.icon);
text.setText("This is a custom Toast");
```
4. 创建Toast对象
通过Toast类的makeText()方法创建默认的Toast对象,然后使用setView()方法将加载的布局文件添加到Toast对象中。
例如:
```java
Toast toast = Toast.makeText(MainActivity.this, "This is a Toast", Toast.LENGTH_SHORT);
toast.setView(layout);
toast.show();
```
至此,自定义Toast就完成了。
二、防止重复显示
在实际应用开发中,经常会遇到Toast多次弹出重复显示的问题,这给用户的使用体验带来了巨大的困扰。解决这个问题,我们需要使用以下两种方法。
1. 使用Handler
使用Handler可以实现在Toast显示完毕之后再次弹出。我们可以在Toast.show()之后再延迟一段时间再次调用show()方法。
例如:
```java
final Toast toast = Toast.makeText(getApplicationContext(), "This is a Toast", Toast.LENGTH_SHORT);
toast.show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
toast.show();
}
}, 2000);
```
上面的代码中,toast先弹出,然后等待两秒后再次弹出。这种方式不需要特殊的权限,代码比较简单。
2. 使用单例模式
通过使用单例模式,可以确保整个应用中只有一个Toast对象,能够避免多次弹出。
以下是单例模式中应该注意的事项:
首先,创建一个静态的单例对象和一个构造方法,判断单例对象是否为空,不为空的话直接将对象返回,如果为空,就再创建一个新的Toast。
例如:
```java
private static ToastUtil sToastUtil;
private ToastUtil(Context context) {
mToast = Toast.makeText(context, "", Toast.LENGTH_SHORT);
}
public static ToastUtil getInstance(Context context) {
if (sToastUtil == null) {
sToastUtil = new ToastUtil(context.getApplicationContext());
}
return sToastUtil;
}
```
其次,添加需要展示的文字
添加展示的文字的方法,只需要调用mToast.setText()即可,这里我再加上了防止重复展示的代码。
例如:
```java
public void showToast(String msg) {
mToast.setText(msg);
if (cancelLastToast()) {
mToast.show();
mLastToastTime = System.currentTimeMillis();
}
}
private boolean cancelLastToast() {
if (mLastToastTime <= 0) {
return true;
}
if (System.currentTimeMillis() - mLastToastTime >= 2000) {
return true;
}
mToast.cancel();
return false;
}
```
最后,在Activity或者Fragment中,可以直接调用getInstance()方法展示Toast。
例如:
```java
private void showMyToast() {
ToastUtil.getInstance(MainActivity.this).showToast("This is a Toast");
}
```
到此为止,我们不仅完成了自定义Toast的操作,同时解决了Toast重复显示的问题。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/
发表评论 取消回复