現象清單
- 無法輸入中文 (僅英文/數字)
- 長按無法彈出輸入法選單
- 軟鍵盤完全不彈出
三大核心檢查點
1. EditText 關鍵屬性 (XML)
<EditText
android:id="@+id/et_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text|textCapSentences|textMultiLine"
android:imeOptions="actionDone"
android:focusable="true"
android:focusableInTouchMode="true"
android:maxLines="5" />
inputType="text" 必須包含,否則預設為無輸入法模式
focusableInTouchMode="true" 允許觸控取得焦點
2. 視窗/佈局層級干擾
- 父容器
android:descendantFocusability="blocksDescendants" 會攔截焦點 → 移除或改 beforeDescendants
WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM 被設定 → 檢查 getWindow().setFlags() 呼叫
- Dialog/Fragment 中需呼叫
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE)
3. 輸入法服務狀態
- 模擬器/真機是否安裝並啟用中文輸入法 (設定 → 語言與輸入法)
- ADB 指令檢查:
adb shell ime list -a 列出所有啟用的 IME
- 部分廠商 ROM 需在 App 權限中開啟「顯示悬浮窗」才能彈出輸入法候選框
快速驗證腳本
// 在 onCreate 最後加入
EditText et = findViewById(R.id.et_input);
et.setOnFocusChangeListener((v, hasFocus) -> {
if (hasFocus) {
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
imm.showSoftInput(et, InputMethodManager.SHOW_IMPLICIT);
Log.d("DEBUG", "焦點獲取,輸入法應彈出");
}
});
參考資源
百度知道:EditText 無法輸入中文完整解決方案