1. 程式人生 > >點選textview獲取焦點的同時不彈出軟鍵盤

點選textview獲取焦點的同時不彈出軟鍵盤

專案中需要實現點選TextView獲取焦點但不彈出軟鍵盤的需求:

要做兩件工作:

1,進入Activity是TextView自動獲取焦點時不彈出軟鍵盤。這個需求比較簡單,只要在AndroidManifest.xml配置檔案註冊Activity時如下紅色配置:

<activity android:name=".Activity.MainActivity" android:windowSoftInputMode="stateHidden|stateAlwaysHidden"/>
如上配置之後,切換到某個activity時並不會彈出軟鍵盤。但這樣做還不夠,這種情況下點選EditText不僅能獲取焦點,還會彈出軟體盤,如何才能即獲取焦點又不彈出軟鍵盤?
2,即獲取焦點又不彈出軟鍵盤。
   可以在監聽TextView的各種事件的回撥函式中新增如下程式碼:
((Activity)getContext()).getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
try {
    Class<EditText> cls = EditText.class;
    Method setSoftInputShownOnFocus;
    setSoftInputShownOnFocus = cls.getMethod("setShowSoftInputOnFocus"
, boolean.class); setSoftInputShownOnFocus.setAccessible(true); setSoftInputShownOnFocus.invoke(editText, false); } catch (Exception e) { e.printStackTrace(); }
但是專案中有很多這樣的EditText,每個都這麼處理會出現大量的程式碼冗餘。可以自定義繼承自TextView的自定義View.如下面的
NoInputMethodPopEditText。
注意:一定要重寫其構造方法。
public class NoInputMethodPopEditText extends 
EditText { public NoInputMethodPopEditText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); hideSoftKeyboard(); } public NoInputMethodPopEditText(Context context, AttributeSet attrs) { super(context, attrs); hideSoftKeyboard(); } public NoInputMethodPopEditText(Context context) { super(context); hideSoftKeyboard(); } /** * 隱藏軟鍵盤 * */ private void hideSoftKeyboard(){ ((Activity)getContext()).getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); try { Class<EditText> cls = EditText.class; Method setSoftInputShownOnFocus; setSoftInputShownOnFocus = cls.getMethod("setShowSoftInputOnFocus", boolean.class); setSoftInputShownOnFocus.setAccessible(true); setSoftInputShownOnFocus.invoke(this, false); } catch (Exception e) { e.printStackTrace(); } } }