首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android:Dialog 在固定時間無操作後自動關閉(類似音量條)

     編輯:程式設計綜合問答

核心思路

使用 Handler.postDelayed() 排程關閉,任何使用者互動(點擊、觸摸、按鍵)時 removeCallbacks() 取消舊排程並重新排程。

完整實作

public class AutoDismissDialog extends Dialog {
    private static final long AUTO_DISMISS_DELAY = 5000; // 5 秒
    private final Handler handler = new Handler(Looper.getMainLooper());
    private final Runnable dismissRunnable = this::dismiss;

    public AutoDismissDialog(@NonNull Context context) {
        super(context);
    }

    @Override
    public void show() {
        super.show();
        resetTimer();
    }

    @Override
    public void onUserInteraction() {
        super.onUserInteraction();
        resetTimer(); // 使用者操作 → 重置倒數
    }

    private void resetTimer() {
        handler.removeCallbacks(dismissRunnable);
        handler.postDelayed(dismissRunnable, AUTO_DISMISS_DELAY);
    }

    @Override
    public void dismiss() {
        handler.removeCallbacks(dismissRunnable);
        super.dismiss();
    }
}

使用方式

AutoDismissDialog dialog = new AutoDismissDialog(this);
dialog.setContentView(R.layout.my_dialog);
dialog.show();

進階:攔截所有觸摸事件(含 Dialog 內部)

若 onUserInteraction() 未觸發(如 Dialog 非全螢幕),可在 dispatchTouchEvent() 重置:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    resetTimer();
    return super.dispatchTouchEvent(ev);
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved