回答:
xml属性android:cursorVisible="false"
またはjava関数のいずれかを使用できますsetCursorVisible(false)
。
目標をさらに前進させる完璧なソリューション
目標:EditText
フォーカスがないときに点滅しているカーソルを無効にし、フォーカスがあるときに点滅しているカーソルを有効にEditText
します。また、EditText
をクリックするとキーボードが開き、キーボードで[done]を押すと非表示になります。
1)以下のxmlに設定しますEditText
:
android:cursorVisible="false"
2)onClickListenerを設定します。
iEditText.setOnClickListener(editTextClickListener);
OnClickListener editTextClickListener = new OnClickListener()
{
public void onClick(View v)
{
if (v.getId() == iEditText.getId())
{
iEditText.setCursorVisible(true);
}
}
};
3)その後、onCreate
行われているが、使用して押されたときに、イベントをキャプチャしOnEditorActionListener
、あなたにEditText
それから、とsetCursorVisible(false)
。
//onCreate...
iEditText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId,
KeyEvent event) {
iEditText.setCursorVisible(false);
if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
in.hideSoftInputFromWindow(iEditText.getApplicationWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);
}
return false;
}
});
プログラムでエディットテキストカーソルを有効または無効にするには、次のコードを使用できます。
カーソルを有効にする
editText.requestFocus();
editText.setCursorVisible(true);
カーソルを無効にするには
editText.setCursorVisible(false);
XMLを使用して無効にするカーソル
android:cursorVisible="false/true"
android:focusable="false/true"
edit_textを選択可能にするには(コピー/切り取り/貼り付け/選択/すべて選択)
editText.setTextIsSelectable(true);
タッチモードに焦点を合わせるには、XMLで次の行を記述します
android:focusableInTouchMode="true"
android:clickable="true"
android:focusable="true"
プログラム的に
editText.requestFocusFromTouch();
タッチモードでフォーカスをクリアするには
editText.clearFocus()
カーソルの可視性をtrueおよびfalseに設定することによる問題は、再度設定するまでカーソルが削除され、同時にフィールドが編集可能になるため、ユーザーエクスペリエンスが良くないため、問題になる可能性があります。
だから代わりに
setCursorVisible(false)
このようにしてください
editText2.setFocusableInTouchMode(false)
editText2.clearFocus()
editText2.setFocusableInTouchMode(true)
上記のコードはフォーカスを削除し、次にカーソルが削除されます。もう一度有効にして、もう一度タッチして編集できるようにします。通常のユーザーエクスペリエンスと同じです。
私の場合、編集がフォーカスされているときにカーソルを有効/無効にしたいと思いました。
あなたの活動で:
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
View v = getCurrentFocus();
if (v instanceof EditText) {
EditText edit = ((EditText) v);
Rect outR = new Rect();
edit.getGlobalVisibleRect(outR);
Boolean isKeyboardOpen = !outR.contains((int)ev.getRawX(), (int)ev.getRawY());
System.out.print("Is Keyboard? " + isKeyboardOpen);
if (isKeyboardOpen) {
System.out.print("Entro al IF");
edit.clearFocus();
InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edit.getWindowToken(), 0);
}
edit.setCursorVisible(!isKeyboardOpen);
}
}
return super.dispatchTouchEvent(ev);
}
edit.setCursorVisible(!isKeyboardOpen);
ようにedit.setCursorVisible(isKeyboardOpen);
、キーボードが存在するときにカーソルが表示されるように。
この行を親レイアウトに追加するだけです
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:focusable="true"
android:focusableInTouchMode="true">
<EditText
android:inputType="text"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
あなたEdittext
が活動の開始からを無視したい場合は、android:focusable
そしてandroid:focusableInTouchMode
あなたがInshallahを助けるでしょう。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout7" android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:focusable="true" android:focusableInTouchMode="true">
これ
LinearLayout
であなたのEdittext
。
kotlinでyour_edittext.isCursorVisible = false