安卓Toast自定义及防止重复显示

安卓Toast是一种简单的提示框,能够在屏幕上显示一段短暂的信息,通常用于展示用户操作结果、进度提示等。然而,标准的Toast展示效果比较单一,无法满足用户自定义的需求,而且常常出现重复显示的问题。针对这种情况,我们需要使用自定义Toast,并且对其进行防止重复显示的处理。

一、自定义Toast

安卓系统中提供了默认的Toast,可是样式比较简单,无法满足应用开发中的需求,因此我们需要定义自己的Toast。以下是自定义Toast的步骤:

1. 新建XML布局文件

在res/layout目录下新建一个XML文件,例如toast_custom.xml,用于定义Toast的布局。

2. 编写XML文件代码

对于自定义Toast的布局,可以使用LinearLayout、RelativeLayout等布局,注意控件显示顺序,可以自行设计布局。

例如:

```xml

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/image"

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:id="@+id/text"

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/

点赞(8) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部