Android EditTextソフトキーボードの表示と隠すこと

7077 ワード

activityにはandroid:windowSoftInputModeという属性があります.まず、各値の意味を見てみましょう.
  • 【A】stateUnspecified:ソフトキーボードの状態は指定されていません.システムは適切な状態またはテーマに依存する設定
  • を選択します.
  • 【B】stateUnchanged:このactivityが現れると、ソフトキーボードは
  • を非表示にしても表示にしても、前のactivityに保持されます.
  • 【C】stateHidden:ユーザーがactivityを選択した場合、ソフトキーボードは常に
  • を隠す
  • 【D】stateAlwaysHidden:Activityメインウィンドウがフォーカスをとると、ソフトキーボードも常に非表示になる
  • 【E】stateVisible:ソフトキーボードは通常表示される
  • 【F】stateAlwaysVisible:ユーザーがactivityを選択した場合、ソフトキーボードが常に表示する状態
  • 【G】adjustUnspecified:デフォルト設定、通常はシステムによって非表示にするか
  • を表示するかを決定します.
  • 【H】adjustResize:Activityは常に画面のサイズを調整して、ソフトキーボードのスペースを残す
  • 【I】adjustPan:現在のウィンドウの内容は自動的に移動して、現在の焦点がキーボードによって上書きされないようにし、ユーザーが常に入力内容を見ることができる部分
  • .
    では、ソフトキーボードがEditTextを遮らないようにmanifestで構成します.
     

     android:windowSoftInputMode
    Activityメインウィンドウとソフトキーボードのインタラクションモードは、入力パネルの遮蔽問題を回避するために使用することができる、Android 1.5以降の新しい特性.
    このプロパティは2つのことに影響します.
    【一】フォーカスが発生した場合、ソフトキーボードは非表示か表示か
    【二】アクティブなメインウィンドウのサイズを減らして、スペースを空けてキーボードを置くかどうか
    その設定は、次のリストの値、または「state...」の値に「adjust...」の値を加えた組み合わせでなければなりません.任意のグループに複数の値を設定します.たとえば、&mdashには未定義の結果があります.各値の間は|で区切られます.例:
    この設定の値(「stateUnspecified」および「adjustUnspecified」以外)は、トピックで設定した値を上書きします.
     
    プログラムコードを使用して入力メソッドを閉じます.
    1,setSoftInputModeを設定する
    private void setSoftInputMode(boolean isVisible){
        if (HISTORYKEY.equals(Constants.SP_KEY_SEARCH_CONTENT_ARTICAL)){
            if (isVisible){
                this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
            }else {
                this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
            }
    
        }
    }

    2,EditText非表示ソフトキーボード
    //     
    private void hideSoftKeyboard(Context context){
        if (editText == null || context == null)return;
        InputMethodManager imm = (InputMethodManager) context. getSystemService(context.INPUT_METHOD_SERVICE);
        if (imm == null)return;
        imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); //      
    }
    //     
    private void showSoftKeyboard(Context context){
        if (editText == null || context == null)return;
        InputMethodManager imm = (InputMethodManager)context. getSystemService(context.INPUT_METHOD_SERVICE);
        if (imm == null)return;
        imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED);
    }

    EditTextでソフトキーボードを操作する場合、EditTextのフォーカスをキャンセルすることがよくあります
    public void clearFocusable(Context context){
        if (editText == null)return;
        if (framelayout == null)return;
        framelayout.requestFocus();
        framelayout.setFocusable(true);//framelayout  editText    
        framelayout.setFocusableInTouchMode(true); //         ,      editText   
        editText.clearFocus();
        editText.setSelected(false);
        //     
        hideSoftKeyboard(context);
    }

    EditTextのプロパティ設定
  • でよく使用されるいくつかのプロパティ設定
  • 属性値
    意味
    android:hint
    「検索する内容を入力してください」などのヒントを設定します.
    android:textColorHint
    ヒント情報の文字色を設定すると、上のhintの色になります
    android:maxLines
    その名の通り、最も多く表示される行数を設定します
    android:maxLength
    最大入力長の制御
    android:focusableInTouchMode
    クリックしてフォーカスを取得できるかどうかを設定し、falseに設定するとEditTextをクリックしてもフォーカスは取得できません
    android:focusable
    フォーカスを取得できるかどうかも設定し、focusableInTouchMode="true"となり、必ずfocusable="true"となります.focusable="false"は、必ずfocusableInTouchMode="false"になります.したがってEditTextがフォーカスを取得できないようにするには、いずれかをfalseに設定すればよい.
    android:cursorVisible
    カーソル表示を制御し、falseはカーソルを表示せず、デフォルトはtrue
    android:textCursorDrawable
    カーソルの色をコントロールし、「@null」に設定するとtext colorと同じ色になります
    android:imeOptions
    必要に応じて異なる値を設定して異なる効果を得ることができ、車に戻るボタン機能をカスタマイズするにはandroid:singleLine="true"を同時に設定するか、android:inputTypeを設定する必要があります.
    android:inputType
    参照先:https://developer.android.com/training/keyboard-input/style.html#Action
    android:imeOptionsのプロパティの意味
    属性値
    効果
    “flagNoExtractUi”
    ソフトキーボードを画面全体に表示せず、一部の画面のみを使用
    “actionNone”
    入力方式のリターンキーには何のヒントもありません
    “actionGo”
    入力方式のリターンキーは「スタート」
    “actionSearch”
    入力方式のリターンキーは「検索」
    “actionSend”
    入力方式のリターンキーは「送信」
    “actionNext”
    入力方式のリターンキーは「次」
    “actionDone”
    入力方式のリターンキーは「完了」
    注意が必要なのは、リターンのボタン機能を使用するには、android:singleLine="true"を同時に設定する必要があります.入力キーボードの右下隅のデフォルトのリターンキーはもともと改行用なので、単行を設定すると、リターン改行が機能しなくなり、検索、送信、goなどに設定できます.またはandroid:inputTypeの設定
    android:imeOptionsプロパティが設定されている場合、ActionListenerを設定してリターンキーのイベントをリスニングし、対応する処理を行うことができます.
    editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
                @Override
                public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                    if (actionId == EditorInfo.IME_ACTION_SEARCH) {//  
    
                        KeyText =  editText.getText().toString().trim();
                        return true;
                    }
                    return false;
                }
            });
  •  

  • EditTextでは、入力内容の変更をリスニングする設定もできます.
     editText.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                   //   
                }
    
                @Override
                public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                    //   
                }
    
                @Override
                public void afterTextChanged(Editable editable) {
                    //                  
                    if ("".equals(editText.getText().toString().trim())) {
    
                    }
                }
            });

    遅延自動イジェクトソフトウェアディスク
  • InputMethodManager
  • が必要です.
    public static void showSoftKeyboardLate(final View view) {
            Timer timer = new Timer();
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
    
                Context context = view.getContext();
                InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
                view.requestFocus();
                imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
                }
            }, 998);
        }
  • 制御ソフトウェアディスクの表示と非表示
  • public static void toggleSoftKeyboard(Context context, View view, boolean isShow) {
            InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
            if (isShow) {
                view.requestFocus();
                imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
            } else {
                imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
            }
        }

    Activityインタフェースを開いたばかりで、キーボードをポップアップする必要がなく、XMLファイルの下にあるEditTextの親コントロールに追加することもできます.
  • android:focusable="true"
  • android:focusableInTouchMode="true"

  • ソフトキーボードポップアップの詳細は、ブログアドレスを参照してください.http://blog.csdn.net/l540675759/article/details/74528641