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を設定する
2,EditText非表示ソフトキーボード
EditTextでソフトキーボードを操作する場合、EditTextのフォーカスをキャンセルすることがよくあります
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では、入力内容の変更をリスニングする設定もできます.
遅延自動イジェクトソフトウェアディスク InputMethodManager が必要です.制御ソフトウェアディスクの表示と非表示
Activityインタフェースを開いたばかりで、キーボードをポップアップする必要がなく、XMLファイルの下にあるEditTextの親コントロールに追加することもできます.
ソフトキーボードポップアップの詳細は、ブログアドレスを参照してください.http://blog.csdn.net/l540675759/article/details/74528641
では、ソフトキーボードが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())) {
}
}
});
遅延自動イジェクトソフトウェアディスク
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