EditText 깜박임 커서 비활성화


답변:


355

xml 속성 android:cursorVisible="false"또는 java 함수를 사용할 수 있습니다 setCursorVisible(false).


13
굉장한, 이것은 onclicklistener와 함께 올바른 행동을 제공합니다 :)
Warpzit

1
@cerin은 붙여 넣기를 비활성화 할 수 있도록 파란색 마커를 숨기는 방법이 있지만 커서를 계속 볼 수 있도록 유지하면 사용자가 필드의 어디에 있는지 알 수 있습니까?
limlim

9
커서가 아닌 깜박임 자체 만 비활성화 할 수 있습니까?
Android 개발자

35

목표를 향한 완벽한 솔루션

목표 : EditText초점이 맞지 않으면 깜박이는 커서를 비활성화하고 초점이 맞으면 깜박이는 커서를 활성화하십시오 EditText. 아래를 EditText클릭하면 키보드가 열리고 키보드 에서 완료를 누르면 키보드가 숨겨집니다.

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

멋진 대답은 단지 때문에 시간 편집 텍스트 이득 초점이 경우에 커서가 표시 실 거예요 클릭에없이 터치와 클릭에 교체해야합니다
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당신을 알라 신의 뜻 도움이 될 것입니다.

<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의 편집 텍스트로 설정하십시오.

  3. 그런 다음 Edittext put edittext.clearFocus();

키보드를 열면 커서가 활성화되고 키보드를 닫으면 비활성화됩니다.


0

kotlin에서 your_edittext.isCursorVisible = false


마크 업을 포맷하십시오. 코드를 4 칸 들여 쓰기하면됩니다.
Danon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.