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

Android TimePickerDialog 鍵盤輸入不響應問題:三星之外機型通病,建議用第三方庫

     編輯:程式設計綜合問答

現象

系統自帶 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

MaterialTimePicker 使用範例 (官方庫)

// 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");

若必須用系統控件:工作繞過方案

  1. 隱式意圖調用系統時間設置頁面:startActivity(new Intent(Settings.ACTION_DATE_SETTINGS)),用戶設置後返回獲取系統時間(體驗差)。
  2. 自定義 DialogFragment 包裝 TimePicker:在 onCreateDialog 中返回 TimePickerDialog,並在 onResume 強制設置輸入模式(成功率低,不推薦)。

圖片參考

TimePickerDialog 鍵盤問題截圖

總結

系統 TimePickerDialog 鍵盤輸入在非三星機型普遍失效,屬系統 Bug。**直接接入 Material Components 的 MaterialTimePicker 或 wdullaer 的 MaterialDateTimePicker** 可獲得一致、穩定、現代化的體驗,且 API 極簡,無理由繼續踩坑。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved