系統自帶 TimePickerDialog 在大多數機型(Nexus、Pixel、小米、華為等)上**鍵盤輸入時間無響應**,僅三星機型正常。點擊輸入框彈出鍵盤但無法輸入/確認。
Android 官方 TimePickerDialog 內部實現對鍵盤輸入模式的處理存在缺陷,且各廠商 ROM 修改導致行為不一。Google 多年未修復,屬已知系統級 Bug。
| 庫 | 特點 | 適用場景 |
|---|---|---|
| MaterialDateTimePicker (wdullaer) | Material Design 風格、支援鍵盤/滾輪雙模式、API 簡潔 | 現代 App、需統一風格 |
| Android-Pickers (code-troopers) | 功能豐富、支援日期/時間/數字/單選/多選 | 需多種選擇器統一 |
| Material Components for Android (Google 官方) | MaterialTimePicker、MaterialDatePicker、原生整合、長期維護 | 新項目、遵循 Material Design 3 |
// build.gradle
implementation "com.google.android.material:material:1.9.0"
// 代碼
MaterialTimePicker picker = new MaterialTimePicker.Builder()
.setTimeFormat(DateFormat.is24HourFormat(context) ? TimeFormat.CLOCK_24H : TimeFormat.CLOCK_12H)
.setHour(12)
.setMinute(0)
.setTitleText("選擇時間")
.build();
picker.addOnPositiveButtonClickListener(dialog -> {
int hour = picker.getHour();
int minute = picker.getMinute();
// 處理結果
});
picker.show(getSupportFragmentManager(), "TIME_PICKER");
startActivity(new Intent(Settings.ACTION_DATE_SETTINGS)),用戶設置後返回獲取系統時間(體驗差)。onCreateDialog 中返回 TimePickerDialog,並在 onResume 強制設置輸入模式(成功率低,不推薦)。
系統 TimePickerDialog 鍵盤輸入在非三星機型普遍失效,屬系統 Bug。**直接接入 Material Components 的 MaterialTimePicker 或 wdullaer 的 MaterialDateTimePicker** 可獲得一致、穩定、現代化的體驗,且 API 極簡,無理由繼續踩坑。