development

EditText 깜박임 커서 비활성화

big-blog 2020. 5. 27. 08:12
반응형

EditText 깜박임 커서 비활성화


누구나 EditText보기 에서 깜박이는 커서를 비활성화하는 방법을 알고 있습니까?


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


목표를 향한 완벽한 솔루션

목표 : 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;
            }
        });

다음 코드를 사용하여 프로그래밍 방식으로 텍스트 커서 편집을 활성화 및 비활성화 할 수 있습니다.

커서를 활성화하려면

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

필자의 경우 편집에 초점을 맞출 때 커서를 활성화 / 비활성화하려고했습니다.

당신의 활동에서 :

@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);
}

이 레이아웃을 부모 레이아웃에 간단히 추가하십시오.

<?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당신을 알라 신의 뜻 도움이 될 것입니다.

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


  1. 다음을 사용하여 다른보기 (예 : XML의 모든 textview 또는 Linearlayout)로 포커스 변경

    android:focusableInTouchMode="true"
    android:focusable="true"
    
  2. addTextChangedListener를 Activity의 편집 텍스트로 설정하십시오.

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

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


The problem with setting cursor visibility to true and false may be a problem since it removes the cursor until you again set it again and at the same time field is editable which is not good user experience.

so instead of using

setCursorVisible(false)

just do it like this

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

The above code removes the focus which in turn removes the cursor. And enables it again so that you can again touch it and able to edit it. Just like normal user experience.

참고URL : https://stackoverflow.com/questions/5582702/disable-edittext-blinking-cursor

반응형