安卓10 写出Toast自定义时长方法,并提供取消方法,只有第一次生效 如何解决
时间: 2023-11-28 07:51:07 浏览: 116
android自定义时长Toast
5星 · 资源好评率100%
首先,我们需要明确 `Toast` 是 Android 系统提供的一种短暂的提示框,其显示时长默认为短暂的时间,而且不支持自定义时长。如果我们希望实现自定义时长的 `Toast`,可以通过自定义 `Toast` 的方式来实现。
下面是一个自定义时长的 `Toast` 实现示例:
```java
public class CustomToast {
private Toast mToast;
private long mDuration;
public CustomToast(Context context, CharSequence text, long duration) {
mToast = Toast.makeText(context, text, Toast.LENGTH_SHORT);
mDuration = duration;
}
public void show() {
mToast.show();
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
mToast.cancel();
}
}, mDuration);
}
public void cancel() {
mToast.cancel();
}
}
```
使用时,可以按照以下方式调用:
```java
CustomToast customToast = new CustomToast(context, "Hello, world!", 5000);
customToast.show();
```
这里我们自定义了一个名为 `CustomToast` 的类,其中包含了一个 `Toast` 对象和一个时长变量 `mDuration`,并且提供了两个方法:`show()` 和 `cancel()`。`show()` 方法用于显示 `Toast`,并且通过 `Handler` 来实现自定义时长的效果;`cancel()` 方法用于取消 `Toast` 的显示。
至于第一次生效的问题,可以考虑在 `CustomToast` 类中加入一个静态变量,来保存上一次 `show()` 的时间戳。在 `show()` 方法中,可以判断当前时间与上一次 `show()` 的时间差是否小于 `mDuration`,如果是,则不显示 `Toast`,直接返回;否则,更新上一次 `show()` 的时间戳,并且显示 `Toast`。这样就可以保证只有第一次生效了。
阅读全文