programing

Android에서 텍스트 편집 비활성화

magicmemo 2023. 8. 4. 22:59
반응형

Android에서 텍스트 편집 비활성화

응용프로그램에서 사용자가 쓰기 권한이 아닌 읽기 권한만 가진 편집 텍스트가 있습니다.

내가 설정한 코드에서android:enabled="false".

텍스트 편집의 배경이 어두운 색으로 변경되었지만 이를 클릭하면 키보드가 나타나고 텍스트를 변경할 수 있습니다.

텍스트 편집을 비활성화하려면 무엇을 설정해야 합니까?

저는 세팅하는 것이 맞다고 생각합니다.

그리고 만약 당신이 내 링크가 왜 당신의 특성을 가리키는지 궁금하다면.TextView당신의 대답은 다음으로부터 상속받기 때문입니다.TextView:

EditText는 TextView보다 얇은 베니어로 편집 가능하도록 구성됩니다.


와 같이, 아댓글언바같이와된급에래,,editableAPI 레벨 3 이후에는 더 이상 사용되지 않습니다.대신 사용해야 합니다(값 포함)해야 합니다.none).

사용하다EditText.setFocusable(false)
EditText.setFocusableInTouchMode(true)편집을 활성화합니다.

다음 방법을 사용할 수 있습니다.

 private void disableEditText(EditText editText) {
    editText.setFocusable(false);
    editText.setEnabled(false);
    editText.setCursorVisible(false);
    editText.setKeyListener(null);
    editText.setBackgroundColor(Color.TRANSPARENT); 
 }

텍스트 편집 사용:

Enabled EditText

텍스트 편집 사용 안 함:

Disabled EditText

그것은 나에게 효과가 있고 당신에게 도움이 되기를 바랍니다.

사용자 입력을 비활성화하는 데 사용합니다.

android:focusable="false"

Android:message="false" 이 방법은 사용되지 않습니다.

edit 편사 안함용집을 설정합니다.EditText우리는 사용할 수 있을 것 같습니다.focusable enable그렇지만

  1. 용사를 합니다.android:enabled=...또는editText.setEnabled(...)

    또한 텍스트 색상을 변경합니다.EditText
    .

  2. 용사를 합니다.android:focusable=...또는editText.setFocusable(false)-editText.setFocusableInTouchMode(true)

    텍스트 색상은 변경되지 않습니다.EditText
    클릭하면 다음 항목이 강조 표시됩니다.EditText 몇 .

산출량

enter image description here

~하듯이android:editable="false"더 이상 사용되지 않음xml

사용하다android:enabled="false"간단니다.합니까?왜 더 많은 코드를 사용합니까?

당신이 참여하고 싶다면,java class 프로그램을 .

 editText.setEnabled(false);

~하듯이android:editable="false"감소했습니다.텍스트 편집에서 입력 유형 TYPE_NULL을 사용할 수 있습니다.

다음과 같이 사용:

editText.setInputType(InputType.TYPE_NULL);

단순:

editText.setEnabled(false);

저는 구글에서 새로 출시한 자재 디자인 라이브러리를 사용합니다.저의 경우 안드로이드를 사용할 때 작동합니다. "false" 및 안드로이드: cursorVisible="false".

<com.google.android.material.textfield.TextInputLayout
                    android:id="@+id/to_time_input_layout"
                    app:endIconMode="custom"
                    app:endIconDrawable="@drawable/ic_clock"
                    app:endIconContentDescription="ToTime"
                    app:endIconTint="@color/colorAccent"
                    style="@style/OutlinedEditTextStyle"
                    android:hint="To Time">

                    <com.google.android.material.textfield.TextInputEditText
                        android:id="@+id/to_time_edit_text"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:focusable="false"
                        android:cursorVisible="false" />

</com.google.android.material.textfield.TextInputLayout>

텍스트 편집 기능을 비활성화하려면 다음을 사용하십시오.

EditText.setInputType(InputType.TYPE_NULL);

활성화하려는 경우 다음을 사용할 수 있습니다.

EditText.setInputType(InputType.TYPE_CLASS_TEXT);

= FOCUS+CLICK+CURS 사용 안 함

포커스, 클릭 및 커서 가시성을 비활성화하면 유용합니다.

여기 XML의 코드가 있습니다.

<EditText
    android:id="@+id/name"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:focusable="false"
    android:cursorVisible="false"
    android:clickable="false"
    />

클래스에서 아래 속성 설정:

editText.setFocusable(false);
editText.setEnabled(false);

당신이 요구한 대로 원활하게 작동할 것입니다.

이렇게 하면 텍스트 편집이 비활성화됩니다.

editText.setEnabled(false);

그리고 이것을 사용함으로써.

editText.setInputType(InputType.TYPE_NULL);

편집 텍스트에 소프트키보드가 표시되지 않지만 실제 키보드에 연결되어 있으면 입력할 수 있습니다.

android:editable="false"이클립스는 다음 메시지를 표시합니다. "clipse:clipse는 더 이상 사용되지 않습니다.대신 inputType을 사용하십시오."

그래서 저는.android:focusable="false"대신, 그것은 저에게 잘 작동했습니다.

android:editable="false"

이제는 더 이상 사용되지 않습니다.

 YourEditText.setInputType(InputType.TYPE_NULL);

용사를 합니다.android:editable="false"감됨산. 대사용합니다야를 사용해야 .android:focusable="false"

사용하다TextView대신.

저 같은 경우에는 제가 필요했습니다.EditText줄 수 초 할 텍 스 를 트 스 크 롤 경 우 과 가 ▁text ▁if ▁no ▁scroll ▁to ▁exceed 스 롤 크 ▁of ▁lines 를 줄maxLines사용할 수 없는 경우.이 구현은 저에게 완벽하게 효과가 있었습니다.

private void setIsChatEditTextEditable(boolean value)
{
    if(value)
    {
        mEdittext.setCursorVisible(true);
        mEdittext.setSelection(chat_edittext.length());
       // use new EditText(getApplicationContext()).getKeyListener()) if required below
        mEdittext.setKeyListener(new AppCompatEditText(getApplicationContext()).getKeyListener());  
    }
    else
    {
        mEdittext.setCursorVisible(false);
        mEdittext.setKeyListener(null);
    }
}

이것을 사용해 보세요, 저에게 잘 맞습니다.

public class CustomEdittext extends EditText {

Boolean mIsTextEditor=true;
public CustomEdittext(Context context, AttributeSet attrs) {
    super(context, attrs);
    // TODO Auto-generated constructor stub
}

@Override
public boolean onCheckIsTextEditor() {
    // TODO Auto-generated method stub
    return mIsTextEditor;
}


@Override
public boolean onTouchEvent(MotionEvent event) {
    // TODO Auto-generated method stub
    mIsTextEditor=false;
    Boolean mOnTouchEvent=super.onTouchEvent(event);
    mIsTextEditor=true;     
    return mOnTouchEvent;
} }

고참: 추야합니다를 해야 합니다.this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 당신의 활동에 관하여 또는 그 밖의 것에 관하여keyboard처음에 팝업됩니다.

일부 답변에서 언급했듯이, 편집 텍스트를 비활성화하면 회색이 되고 포커스 가능한 false를 설정하면 커서가 표시됩니다.

만약 당신이 xml로만 그것을 하고 싶다면 이것은 속임수를 썼습니다.

       <YourFloatLabel
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

            <EditText
                android:id="@+id/view_ads_search_select"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:focusable="true"
                android:clickable="true"/>  
       </YourFloatLabel>

편집 텍스트 위에 프레임 레이아웃을 추가하고 편집 텍스트를 클릭할 수 없도록 포커스 및 클릭 가능으로 설정합니다.

이것은 나에게 도움이 됩니다.

Android:설정 가능="거짓"

승인된 답변에 대한 @Asimpot의 설명에서 다음을 사용합니다.

myEditText.setEnabled(false);
myEditText.setInputType(InputType.TYPE_NULL);

밥은 네 삼촌이고

오늘도 나는 여전히 사용합니다.editable="false"뿐만 아니라 또한focusable="false".

EditText를 편집 불가능으로 만들어야 하는 경우는 EditText 스타일(그 밑줄, 힌트 등)을 유지하고 싶지만 텍스트 대신 다른 입력을 허용하기 때문이라고 생각합니다.예를 들어 드롭다운 목록입니다.

이러한 사용 사례에서, 우리는 다음과 같은 것을 가질 필요가 있습니다.EditText ( 가능)enabled="false"적합하지 않음).focusable="false"하지만 이 방법을 사용하면 편집 텍스트를 오래 유지하고 클립보드에서 텍스트를 붙여넣을있습니다.코드와 처리 방법에 따라 앱이 손상될 수도 있습니다.

그래서 저도 사용했습니다.editable="false"그리고 지금은 모든 것이 훌륭합니다. 경고만 빼고요.

사용할 수 있습니다.android:focusable="false"또한 커서를 비활성화해야 합니다. 그렇지 않으면 복사/삭제 기능이 계속 작동합니다.

그래서, 사용합니다.

android:focusable="false"
android:cursorVisible="false"

여러 수준의 장애를 달성하는 방법에는 여러 가지 방법이 있습니다.

  • editText.setShowSoftInputOnFocus(false);그리고.editText.setFocusable

합니다.EditText키보드 표시 - 일부 텍스트에서 쓰기.그러나 커서는 여전히 표시되며 사용자는 일부 텍스트에 붙여넣을 수 있습니다.

  • editText.setCursorVisible(false)

커서를 숨깁니다.당신이 왜 그것을 하고 싶어하는지 잘 모르겠습니다.사용자는 텍스트를 입력하고 붙여넣을 수 있습니다.

  • editText.setKeyListener(null)

저는 이 방법이 가장 편리하다고 생각합니다.사용자가 텍스트를 입력할 수 있는 방법은 없지만 위젯은 여전히 사용할 수 있습니다.OnClickListener했을 때 용자가터때작트리하려면거을업치할사▁if▁when면려▁you▁action하용거트▁want리▁it.

  • editText.setEnabled(false);

를 완전히 비활성화합니다.EditText 그대로 전용으로, 를 입력할 수 를 들어) 문그읽 '기이전용'므예로사용텍가자입수없를며력으할스트자대로예)▁it▁(:이없며수▁(으입▁literally-'▁is▁infor할▁':)OnClickListener 그것과 함께 작동하지 않습니다.

텍스트 문서 편집

코틀린에서 다음과 같은 확장 함수를 사용할 수 있습니다.

fun EditText.disableInput() {
    isFocusable = false
    isEnabled = false
    isCursorVisible = false
    keyListener = null
    setBackgroundColor(Color.TRANSPARENT)
}

이와 같이:

myEditText.disableInput()

위의 답변은 토크백 모드와 같은 모든 경우에 실제로 적용되지 않습니다.

위에 추가 보기를 추가했습니다.EditText클릭 청취자를 할당했습니다.

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    ...
            <com.google.android.material.textfield.TextInputLayout
                android:id="@+id/textInputLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <com.google.android.material.textfield.TextInputEditText
                    android:id="@+id/textInputEditText"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"/>

            </com.google.android.material.textfield.TextInputLayout>

            <View
                android:id="@+id/btnTextInputLayout"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:background="?selectableItemBackground"
                app:layout_constraintBottom_toBottomOf="@+id/textInputLayout"
                app:layout_constraintEnd_toEndOf="@+id/textInputLayout"
                app:layout_constraintStart_toStartOf="@+id/textInputLayout"
                app:layout_constraintTop_toTopOf="@+id/textInputLayout" />

    ...

</androidx.constraintlayout.widget.ConstraintLayout>

도우미 기능:

    private fun makeOverlayEditTextEditable(
        editText: EditText,
        clickOverlayView: View,
        inputType: Int
    ) {
        enableEditTextInput(editText, inputType)
        clickOverlayView.isVisible = false
    }

    private fun makeOverlayEditTextClickable(
        editText: EditText,
        clickOverlayView: View,
        clickListener: () -> Unit
    ) {
        disableEditTextInput(editText)
        clickOverlayView.setOnClickListener {
            clickListener()
        }
        clickOverlayView.isVisible = true
    }
    @SuppressLint("ClickableViewAccessibility")
    private fun disableEditTextInput(editText: EditText) {
        editText.inputType = InputType.TYPE_NULL
        editText.isFocusable = false
        editText.isFocusableInTouchMode = false
        editText.isClickable = false
        editText.setOnTouchListener { _, _ -> true }
    }

    @SuppressLint("ClickableViewAccessibility")
    private fun enableEditTextInput(editText: EditText, inputType: Int) {
        editText.inputType = inputType
        editText.isFocusable = true
        editText.isFocusableInTouchMode = true
        editText.isClickable = true
        editText.setOnTouchListener(null)
    }

용도:

// Make EditText editable
makeOverlayEditTextEditable(
    editText = binding.textInputLayout,
    clickOverlayView = binding.btnTextInputLayout,
    inputType = InputType.TYPE_CLASS_TEXT
)

// Make EditText clickable
makeOverlayEditTextClickable(
    editText = binding.textInputLayout,
    clickOverlayView = binding.btnTextInputLayout,
) {
    // Handle click
}

이 패턴이 응용프로그램 전체에서 사용되는 경우 사용자 정의 보기에서 이 논리를 추상화하는 것이 좋습니다.

XML 코드에 설정하면 작동합니다.

Android:FocusableInTouchMode="false"

언급URL : https://stackoverflow.com/questions/4297763/disabling-of-edittext-in-android

반응형