通常、これらのフィールドを設定するために使用されるものの利便性として、EditTextフィールドとボタンのあるアクティビティがあります。ただし、ユーザーがEditTextフィールドの1つに触れると、Androidソフトキーボードが自動的に表示されます。デフォルトで非表示のままにしたい、nlessユーザーがメニューを長押しするボタンこれに対する解決策を探していくつかの答えを見つけましたが、今のところそれらを機能させることはできません。
私は次を試しました:
1-onCreateメソッドで、
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
2-onCreateメソッドでも、
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY);
3-およびマニフェストファイルで、
<activity Android:name=".activityName" Android:windowSoftInputMode="stateAlwaysHidden"/>
これらの方法はいずれも機能しません。ユーザーがEditTextフィールドをクリックするたびに、ソフトキーボードが表示されます。ユーザーがメニューキーを長押しして明示的に表示した場合にのみ、ソフトキーボードを表示します。
なぜこれが機能しないのですか?
これはあなたを助けます
editText.setInputType(InputType.TYPE_NULL);
編集:
ソフトキーボードを表示するには、long key press event of menu button
に次のコードを記述する必要があります
editText.setInputType(InputType.TYPE_CLASS_TEXT);
editText.requestFocus();
InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(editText, InputMethodManager.SHOW_FORCED);
AndroidManifest.xml
のActivity
に次の属性を追加する必要があります。
<activity
...
Android:windowSoftInputMode="stateHidden|adjustResize"
...
/>
私は時々それを行うためにちょっとしたトリックを使用します。目に見えないフォーカスホルダーをレイアウトの上部のどこかに配置しました。例えばこのような
<EditText Android:id="@id/editInvisibleFocusHolder"
style="@style/InvisibleFocusHolder"/>
このスタイルで
<style name="InvisibleFocusHolder">
<item name="Android:layout_width">0dp</item>
<item name="Android:layout_height">0dp</item>
<item name="Android:focusable">true</item>
<item name="Android:focusableInTouchMode">true</item>
<item name="Android:inputType">none</item>
</style>
そしてonResumeで私は電話します
editInvisibleFocusHolder.setInputType(InputType.TYPE_NULL);
editInvisibleFocusHolder.requestFocus();
それは1.6から4.xまで私にとってうまく機能します
TextViewクラスを長い間調べた結果、キーボードが表示されないようにする方法を見つけました。トリックは、表示された直後に非表示にするため、キーボードが表示されて非表示になった後に呼び出されるメソッドを検索しました。
EditTextクラスを実装しました
public class NoImeEditText extends EditText {
public NoImeEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
/**
* This method is called before keyboard appears when text is selected.
* So just hide the keyboard
* @return
*/
@Override
public boolean onCheckIsTextEditor() {
hideKeyboard();
return super.onCheckIsTextEditor();
}
/**
* This methdod is called when text selection is changed, so hide keyboard to prevent it to appear
* @param selStart
* @param selEnd
*/
@Override
protected void onSelectionChanged(int selStart, int selEnd) {
super.onSelectionChanged(selStart, selEnd);
hideKeyboard();
}
private void hideKeyboard(){
InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getWindowToken(), 0);
}
}
とスタイル
<com.my.app.CustomViews.NoImeEditText
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:editable="false"
Android:background="@null"
Android:textSize="@dimen/cell_text" />
EditorInfo.TYPE_NULL
をビューに設定しても、ソフトキーボードは上昇し続けました。 nik431の答えから得たアイデアを除いて、答えはどれも私にとってはうまくいきませんでした。
editText.setCursorVisible(false);
editText.setFocusableInTouchMode(false);
editText.setFocusable(false);
私のテスト結果:
setInputType
を使用:
editText.setInputType(InputType.TYPE_NULL);
ソフトキーボードは消えますが、カーソルも消えます。
setShowSoftInputOnFocus
を使用:
editText.setShowSoftInputOnFocus(false)
期待どおりに動作します。
プログラムやxmlの両方で、システムキーボードが表示されないようにする方法は非常にさまざまです。ただし、これは、API 11より前のデバイスをサポートしているときに機能した方法です。
// prevent system keyboard from appearing
if (Android.os.Build.VERSION.SDK_INT >= 11) {
editText.setRawInputType(InputType.TYPE_CLASS_TEXT);
editText.setTextIsSelectable(true);
} else {
editText.setRawInputType(InputType.TYPE_NULL);
editText.setFocusable(true);
}
次の行は、まさに探しているものです。このメソッドはAPI 21
に含まれているため、API 21
以上で機能します。
edittext.setShowSoftInputOnFocus(false);
EditText
のxmlで以下のプロパティを設定してみましょう
Android:focusableInTouchMode="true" Android:cursorVisible="false".
起動時にソフトキーパッドを非表示にする場合は、この手順を実行してください link
public class NonKeyboardEditText extends AppCompatEditText {
public NonKeyboardEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onCheckIsTextEditor() {
return false;
}
}
そして追加
NonKeyboardEditText.setTextIsSelectable(true);
アクティビティで単にEditText.setFocusable(false);
を使用する
またはxmlで使用
Android:focusable="false"
こんにちは、このコードを使用してください、それは私のために100%働いています
EditText ee=new EditText(this);
ee.setShowSoftInputOnFocus(false);
*ただし、コードの下にあるedittextクリックでキーボードを非表示にしたいだけですが、キーボードアイコンと戻るボタンの上向きの記号が作成されます*指定されたコードは次のようになります
EditText ee=new EditText(this);//create edittext
final View.OnTouchListener disable =new View.OnTouchListener() {
public boolean onTouch (View v, MotionEvent event) {
v.onTouchEvent(event);
InputMethodManager img =
(InputMethodManager)v.getContext().getSystemService(INPUT_METHOD_SERVICE);
if (img != null) {
img.hideSoftInputFromWindow(v.getWindowToken(),0);
}
return true;
}
};
//call touch listener
ee.setOnTouchListener(disable);
テキストを変更するリスナーの場合にも使用します
EditText ee= new EditText(this);
Text=new TextWatcher(){
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int
after) {
InputMethodManager img = (InputMethodManager)
getSystemService(INPUT_METHOD_SERVICE);
img.hideSoftInputFromWindow(ee.getWindowToken(), 0);
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
InputMethodManager img = (InputMethodManager)
getSystemService(INPUT_METHOD_SERVICE);
img.hideSoftInputFromWindow(ee.getWindowToken(), 0);
}
@Override
public void afterTextChanged(Editable s) {
InputMethodManager img = (InputMethodManager)
getSystemService(INPUT_METHOD_SERVICE);
img.hideSoftInputFromWindow(ee.getWindowToken(), 0);
}
};
ee.addTextChangedListener(Text);
onclickリスナーの場合にも使用
EditText ee=new EditText(this);
ee.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
InputMethodManager img= (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
img.hideSoftInputFromWindow(ee.getWindowToken(),0);
}});
すべてのコードが機能しますが、私にとっては最初のコードが最適です
キーボードを隠す
editText.setInputType(InputType.TYPE_NULL);
キーボードを表示
etData.setInputType(InputType.TYPE_CLASS_TEXT);
etData.setFocusableInTouchMode(true);
親レイアウト内
Android:focusable="false"
weekText = (EditText) layout.findViewById(R.id.weekEditText);
weekText.setInputType(InputType.TYPE_NULL);
以下の方法を使用してください
private fun hideKeyboard(activity: Activity, editText: EditText) {
editText.clearFocus()
(activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager).hideSoftInputFromWindow(editText.windowToken, 0)
}
同じ簡単な指示に基づいた3つの方法:
a)。検索と同じくらい簡単な結果(1):
Android:focusableInTouchMode="true"
レイアウトの先行要素の構成の中で、例:
レイアウト全体が次のもので構成されている場合:
<ImageView>
<EditTextView>
<EditTextView>
<EditTextView>
次に、ImageViewパラメーターの中で(1)を記述できます。これにより、EditTextではなくImageViewにAndroidの注意が向けられます。
b)。 ImageViewとは別の先行要素がある場合、(2)を(1)に追加する必要があります:
Android:focusable="true"
c)。ビュー要素の上部に空の要素を作成することもできます。
<LinearLayout
Android:focusable="true"
Android:focusableInTouchMode="true"
Android:layout_width="0px"
Android:layout_height="0px" />
この時点までのこの代替案は、私が見てきた中で最も単純なものです。それが役に立てば幸い...