55-Android之修改Toast的显示时长
平台:SRPD Android10 SC9832E
在系统中,输入法切换的提示,我使用的是Toast的来实现的。
后续客户测试反映,输入法切换的提示显示太慢,要求改进。
我因此针对输入法的Toast的显示,增加了一个Toast.LENGTH_INPUT属性。
frameworks/base/core/java/android/widget/Toast.java
@IntDef(prefix = { "LENGTH_" }, value = {
LENGTH_SHORT,
LENGTH_LONG,
LENGTH_INPUT // TODO 添加
})
@Retention(RetentionPolicy.SOURCE)
public @interface Duration {}
public static final int LENGTH_INPUT = 2; // TODO 添加
frameworks/base/services/core/java/com/android/server/notification/NotificationManagerService.java
@GuardedBy("mToastQueue")
private void scheduleDurationReachedLocked(ToastRecord r){
mHandler.removeCallbacksAndMessages(r);
Message m = Message.obtain(mHandler, MESSAGE_DURATION_REACHED, r);
// TODO 此处修改 @{
// int delay = r.duration == Toast.LENGTH_LONG ? LONG_DELAY : SHORT_DELAY;
int delay = r.duration == Toast.LENGTH_LONG ? LONG_DELAY : (r.duration == Toast.LENGTH_INPUT ? 800 : SHORT_DELAY);
// @}
// Accessibility users may need longer timeout duration. This api compares original delay
// with user's preference and return longer one. It returns original delay if there's no
// preference.
delay = mAccessibilityManager.getRecommendedTimeoutMillis(delay,
AccessibilityManager.FLAG_CONTENT_TEXT);
mHandler.sendMessageDelayed(m, delay);
}
如果需要修改Toast的Toast.LENGTH_SHORT和Toast. LENGTH_LONG的默认时长,请修改NotificationManagerService中LONG_DELAY和SHORT_DELAY常量的值:
frameworks/base/services/core/java/com/android/server/notification/NotificationManagerService.java
static final int LONG_DELAY = PhoneWindowManager.TOAST_WINDOW_TIMEOUT;
static final int SHORT_DELAY = 2000; // 2 seconds,TODO 修改该值
frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
public static final int TOAST_WINDOW_TIMEOUT = 3500; // 3.5 seconds, TODO 修改该值