安卓10 写出Toast自定义时长方法,并提供取消方法,出现只有第一次自定义时长生效的问题 如何解决
时间: 2023-11-28 12:51:09 浏览: 141
在Android 10中,可以使用如下的方式自定义Toast的显示时长:
1. 创建一个自定义的Toast:
```
Toast customToast = Toast.makeText(getApplicationContext(), "Custom toast message", Toast.LENGTH_SHORT);
```
2. 通过反射获取mTN字段,该字段是Toast对象的私有成员变量:
```
try {
Field mTNField = Toast.class.getDeclaredField("mTN");
mTNField.setAccessible(true);
Object mTNObject = mTNField.get(customToast);
return mTNObject;
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
```
3. 获取mTNObject的持续时间字段,并设置为你想要的持续时间:
```
Field mDurationField = mTNObject.getClass().getDeclaredField("mDuration");
mDurationField.setAccessible(true);
mDurationField.setInt(mTNObject, duration);
```
4. 显示自定义的Toast:
```
customToast.show();
```
5. 取消Toast:
```
customToast.cancel();
```
如果只有第一次自定义时长生效的问题,可能是由于使用了单例模式的原因,可以尝试在每次显示Toast之前都重新创建一个Toast对象,然后再进行自定义时长的设置。
阅读全文