programing

EditText 깜박이는 커서 사용 안 함

newstyles 2023. 9. 6. 21:51

EditText 깜박이는 커서 사용 안 함

화면에서 깜박이는 커서를 비활성화하는 방법을 아는 사람이 있습니까?EditText보기?

xml 속성을 사용할 수 있습니다.android:cursorVisible="false"또는 프로그래밍 방식으로:

  • java:view.setCursorVisible(false)
  • 코틀린:view.isCursorVisible = false

목표를 향해 한 단계 더 나아가는 완벽한 솔루션

목표: 다음과 같은 경우 깜박이는 커서를 비활성화합니다.EditText초점이 맞지 않으며 다음과 같은 경우 깜박이는 커서를 활성화합니다.EditText초점을 맞추고 있습니다.아래는 또한 키보드를 엽니다.EditText를 클릭하고 키보드에서 완료를 누르면 숨깁니다.

1) 아래 xml을 입력합니다.EditText:

android:cursorVisible="false"

2) ClickListener에서 설정:

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

simple 이 선을 부모 레이아웃에 추가합니다.

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

커서 가시성을 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);
}

root 레이아웃에서 Android:focusableInTouchMode="true"를 추가합니다. 이때 편집 텍스트를 클릭하면 커서가 표시됩니다.

만약 당신이 무시하고 싶다면,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의 임의 텍스트 뷰 또는 선형 레이아웃)로 변경합니다.

    android:focusableInTouchMode="true"
    android:focusable="true"
    
  2. 활동에서 텍스트를 편집하려면 addTextChangedListener를 설정합니다.

  3. 텍스트를 바꾼 후에 텍스트를 편집합니다.edittext.clearFocus();

이렇게 하면 키보드가 열려 있으면 커서가 활성화되고 키보드가 닫혀 있으면 비활성화됩니다.

kotlin your_edittext.isCursorVisible = false에서

루트 레이아웃.findFocus().clearFocus();

언급URL : https://stackoverflow.com/questions/5582702/disable-edittext-blinking-cursor