EditTextの点滅カーソルを無効にする


回答:


355

xml属性android:cursorVisible="false"またはjava関数のいずれかを使用できますsetCursorVisible(false)


13
素晴らしい、これを表示するonclicklistenerと一緒に使用すると、正しい動作が得られます:)
Warpzit 2012

1
@cerinは、青いマーカーを非表示にして貼り付けを無効にする方法はありますが、カーソルを表示したままにして、ユーザーがフィールドのどこにいるかを確認できるようにしますか?
limlim 2014

9
カーソルではなく、点滅自体を無効にすることはできますか?
Android開発者

35

目標をさらに前進させる完璧なソリューション

目標: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;
            }
        });

6
KeyEvent.KEYCODE_ENTERは、すべてのキーボードで機能するわけではありません。レイアウトでandroid:imeOptions = "actionDone"を具体的に言及し、EditorInfo.IME_ACTION_DONEも処理する必要があります。
PsyGik 14

クリックするとオンタッチに置き換えるだけでよいでしょう。編集テキストはクリックすることなくフォーカスされるため、この場合、カーソルは表示されません
Antwan

10

プログラムでエディットテキストカーソルを有効または無効にするには、次のコードを使用できます。

カーソルを有効にする

    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()

editText.clearFocus()は私が探していたものです。ありがとう!! +1
iUser

3

カーソルの可視性をtrueおよびfalseに設定することによる問題は、再度設定するまでカーソルが削除され、同時にフィールドが編集可能になるため、ユーザーエクスペリエンスが良くないため、問題になる可能性があります。

だから代わりに

setCursorVisible(false)

このようにしてください

        editText2.setFocusableInTouchMode(false)
        editText2.clearFocus()
        editText2.setFocusableInTouchMode(true)

上記のコードはフォーカスを削除し、次にカーソルが削除されます。もう一度有効にして、もう一度タッチして編集できるようにします。通常のユーザーエクスペリエンスと同じです。


2

私の場合、編集がフォーカスされているときにカーソルを有効/無効にしたいと思いました。

あなたの活動で:

@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);、キーボードが存在するときにカーソルが表示されるように。
Daniel Storm

2

この行を親レイアウトに追加するだけです

<?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>

1

あなた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


0
  1. を使用してフォーカスを別のビューに変更します(例:XMLの任意のtextviewまたはLinearlayout)。

    android:focusableInTouchMode="true"
    android:focusable="true"
  2. addTextChangedListenerをActivityのedittextに設定します。

  3. Edittextのaftertextchangedにputをedittext.clearFocus()挿入します。

これにより、キーボードが開いているときにカーソルが有効になり、キーボードが閉じているときに無効になります。


0

kotlinでyour_edittext.isCursorVisible = false


マークアップをフォーマットしてください。コードを4つのスペースでインデントすることにより、これを行うことができます。
ダノン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.