Android中EditText隱藏/自動彈出輸入法的問題

Dusan_杜小菜發表於2016-05-13

有些時候我們的應用需要在EditText聚焦時自動彈出輸入法,或者隱藏輸入法,關於輸入法彈出,一般不會有什麼問題。但是,有一些情況輸入法是沒發自動彈出的,比如彈出的對話方塊裡有edittext,介紹一些常用的用法。

一,配置AndroidManifest檔案

通用做法,在有edittext的activity中,配置
android:windowSoftInputMode,讓輸入法自動調節大小。
比如登入介面,有兩個EditText和按鈕,當使用者點選輸入使用者名稱時,自動彈出輸入法,將佈局頂上去,adjustResize可以讓輸入法不遮住edittext輸入框。

 <activity
    android:name="com.oair.oair_client.LoginActivity"
    android:label="@string/title_activity_login"
    android:launchMode="singleTask"
    android:screenOrientation="portrait"
    android:configChanges="keyboardHidden|orientation"
    android:windowSoftInputMode="adjustResize"/>

三,設定activity啟動的時候輸入法預設不開啟

activity啟動的時候,editext不聚焦,輸入法是不會彈出的,輸入的時候點選就會彈出輸入法。
也可以在onCreate方法中,設定:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

三,對話方塊有EditText,強制顯示輸入法

彈出的對話方塊裡有edittext,show方法與輸入法的現實可能會衝突,沒發自動彈出的,所以可以這樣:

//顯示對話方塊之後,用handler延時顯示輸入法
dialog_rename.show();
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
               showInputMethod();
            }
        },100);
    }

    private void showInputMethod() {
        //自動彈出鍵盤
        InputMethodManager inputManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
        inputManager.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
        //強制隱藏Android輸入法視窗
        // inputManager.hideSoftInputFromWindow(edit.getWindowToken(),0);
    }

四,輸入法相關方法

/**
 * 顯示鍵盤
 * @param context
 * @param view
 */
public static void showInputMethod(Context context, View view) {
        InputMethodManager im = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
        im.showSoftInput(view, 0);
}
 //隱藏虛擬鍵盤
 public static void HideKeyboard(View v){
          InputMethodManager imm = ( InputMethodManager) v.getContext( ).getSystemService(Context.INPUT_METHOD_SERVICE);     
        if (imm.isActive()) {     
            imm.hideSoftInputFromWindow( v.getApplicationWindowToken() , 0 );       
        }    
}

總結

應用起來比較簡單,不再贅述。也可以配置EditText,設定是否獲得焦點,清除焦點:edit.clearFocus();
EditText不彈出軟體鍵盤:
edit.setInputType(InputType.TYPE_NULL);
activity預設彈出輸入法:
android:windowSoftInputMode="stateVisible|adjustPan"
歡迎交流,杜乾,Dusan,Q 291902259。

相關文章