source

Android에서 XML을 통해 EditText를 편집할 수 없게 만드는 방법?

manycodes 2023. 9. 8. 21:38
반응형

Android에서 XML을 통해 EditText를 편집할 수 없게 만드는 방법?

어떻게 만드는지 알려줄 수 있는 사람?EditText요? XML로 설정해 . 설정을 시도했습니다.android:editablefalse,그렇지만

  1. 감가 상각되었습니다.
  2. 효과가 없었습니다.

EditText xml 파일에 추가합니다.

<EditText ...
        android:clickable="false" 
        android:cursorVisible="false" 
        android:focusable="false" 
        android:focusableInTouchMode="false">
</EditText>

과 가 가 과 과 같은 효과android:editable="false". 저를 위해 일했어요, 당신에게도 효과가 있기를 바랍니다.

이 간단한 코드를 사용합니다.

textView.setKeyListener(null);

그건 효과가 있다.

: 을 하려면 : KeyListener나중에과 같이 ㅠㅠ

: 키를 1의 태그로 설정합니다 : 합니다 로 를 합니다 로 를 textView

textView.setTag(textView.getKeyListener());
textView.setKeyListener(null);

: listener를 합니다 : 에서 를 합니다 합니다 를 에서 textView

textView.setKeyListener((KeyListener) textView.getTag());

편집 텍스트를 다음과 같이 하십시오.

EditText editText;

editText.setKeyListener(null);

작동은 되지만 키를 듣지 않을 뿐입니다.

사용자는 편집 텍스트에서 커서를 볼 수 있습니다.

해봐도 좋습니다.editText.setEnabled(false);

이는 사용자가 커서를 볼 수 없음을 의미합니다.간단히 말하면 그렇게 될 것입니다.TextView.

다른 답변에서 언급된 바와 같이, 당신은 다음과 같이 할 수 있습니다.setEnabled(false)XML을 통해 설정하는 방법을 묻기 때문에 다음과 같습니다.

다음 을 합니다에 합니다.EditText:

android:enabled="false"

XML에서 사용 안 함(한 줄):

 android:focusable="false"

필요한 경우 Java에서 다시 활성화합니다(한 줄도 있음).

editText.setFocusableInTouchMode(true);

이들은 "편집 가능"을 더 이상 사용하지 않게 만들었지만 inputType에서 작동하는 것에 해당하는 것을 제공하지 않았습니다.

그런데 inputType="none"은 효과가 있습니까?내가 보기에 그것을 사용하든 사용하지 않든 아무런 차이가 없습니다.

예를 들어, 기본 editText는 한 줄이라고 합니다.그러나 입력 유형을 선택해야 한 줄로 표시됩니다.none(없음)을 선택해도 여전히 다중 행입니다.

이 조합은 제게 효과가 있었습니다.

<EditText ... >
    android:longClickable="false"
    android:cursorVisible="false"
    android:focusableInTouchMode="false"
</EditText>

Android:editable은 더 이상 사용되지 않습니다.안드로이드:inputType="none"을 대신 사용해야 하지만 버그(https://code.google.com/p/android/issues/detail?id=2854) 로 인해 작동하지 않습니다.

하지만 포커스가 가능한 것을 사용하면 같은 것을 얻을 수 있습니다.

XML을 통해:

<EditText ...
        android:focusable="false" 
</EditText>

출처 코드:

((EditText) findViewById(R.id.LoginNameEditText)).setFocusable(false);

클릭하고 싶지만 편집하지 않으려면 다음을 시도합니다.

        android:focusable="false"

을 요.android:enabled="false" . 은 에 을 할 입니다 입니다 할 을 에 은 EditText편집할 수 없는 것처럼 보일 겁니다.

<EditText
    android:id="@+id/txtDate"
    android:layout_width="140dp"
    android:layout_height="wrap_content"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="10dp"
    android:layout_marginTop="2dp"
    android:clickable="false"
    android:cursorVisible="false"
    android:gravity="center" />

다음을 사용합니다.

txtDate.setKeyListener(null);

자바 코드로 실행하려면 다음 줄을 사용하여 비활성화합니다.

editText.setEnabled(false);

그리고 이를 가능하게 하는 방법:

editText.setEnabled(true);

저는 이렇게 하려고 했습니다.

textView.setInputType( InputType.TYPE_NULL );

효과가 있어야 하는데, 저한테는 효과가 없었어요.

저는 이 코드로 끝냈습니다.

textView.setKeyListener(new NumberKeyListener() {
    public int getInputType() {
        return InputType.TYPE_NULL;
    }

    protected char[] getAcceptedChars() {
        return new char[] {};
    }
});

완벽하게 작동하는군요

텍스트 편집에 초점을 맞추지 않고 클릭 시 키보드가 표시되지 않는 활동을 원할 때는 이렇게 해야 합니다.

주 레이아웃에 특성 추가

android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"

텍스트 편집 필드를 선택합니다.

android:focusable="false"
android:focusableInTouchMode="false"

다음은 예입니다.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:id="@+id/activity_home"
    android:background="@drawable/bg_landing"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="0dp"
    android:paddingLeft="0dp"
    android:paddingRight="0dp"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:descendantFocusability="beforeDescendants"
    android:focusableInTouchMode="true"
    tools:context="com.woppi.woppi.samplelapp.HomeActivity">

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@null"
        android:inputType="textPersonName"
        android:ems="10"
        android:id="@+id/fromEditText"
        android:layout_weight="1"
        android:hint="@string/placeholder_choose_language"
        android:textColor="@android:color/white"
        android:textColorHint="@android:color/darker_gray"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:onClick="onSelectFromLanguage" />

</RelativeLayout>

@mahe madi 외에도 이것도 시도해 볼 수 있습니다.

editText.setEnabled(false);
editor.setTextColor(Color.BLACK);

이 방법은 커서를 숨기고 초점을 잃으며 텍스트 보기와 같이 동작하는 텍스트 색을 검은색으로 설정합니다.

텍스트를 편집하려면 텍스트 편집의 모든 속성을 얻으려면 이 작업을 수행하기만 하면 됩니다.

editText.setEnabled(true);

도움이 되길 바라요 :)

당신은 사용할 수 있습니다.android:editable="false"하지만 당신에게 정말로 조언하고 싶습니다.setEnabled(false)컨트롤을 편집할 수 없다는 시각적 단서를 사용자에게 제공하기 때문입니다.비활성화된 모든 위젯에서 동일한 시각적 큐가 사용되며 일관성이 좋습니다.

시도해 보기:

android:inputType="none"

이렇게 하면 클립보드를 선택하고 복사할 수 있지만 수정하거나 붙여넣을 수 없습니다.

android:enable="true"
android:textIsSelectable="true"
android:inputType="none"

저는 다음을 시도해 봤습니다.

codeEditText.setInputType(InputType.TYPE_NULL);

this.codeEditText.setOnFocusChangeListener(new OnFocusChangeListener() {

  @Override
  public void onFocusChange(View v, boolean hasFocus) {

    if (hasFocus) {

      pickCode();

    }

  }

});
this.codeEditText.setOnClickListener(new OnClickListener() {

  @Override
  public void onClick(View v) {

    pickCode();

  }

});

그러나 문제는 편집 텍스트가 양식의 첫 번째인 경우 포커스를 받아 새로운 활동을 시작하는 pickCode() 코드가 바로 호출된다는 것입니다.그래서 코드를 다음과 같이 수정했는데 꽤 잘 작동하는 것 같습니다(단, 텍스트 편집에 포커스를 맞출 수는 없지만 그럴 필요는 없습니다).

itemCodeEditText.setFocusable(false);

this.itemCodeEditText.setOnClickListener(new OnClickListener() {

  @Override
  public void onClick(View v) {

    pickItem();

  }

});

안부 전합니다,

댓글 환영합니다.

존 고슈

사용합니다.EditText.setFocusable(false)편집하려면 다시 true로 설정합니다.

이것을 시도해보세요. 몇몇 사람들에게 도움이 될 수도 있습니다.

<EditText  
android:enabled="false"
android:textColor="#000000"/>

Android:editable이 더 이상 사용되지 않으므로 대신 inputType을 사용합니다.

   <EditText
        android:id="@+id/editText_x"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="70"
        android:inputType="none"
        android:hint="@string/enter_x" />

나는 같은 문제에 직면했지만 관찰 후에 나는 그것을 발견했습니다.android:editable="false"입력 유형일 때만 작동합니다(android:inputType="ANY_VALUE"편집 텍스트에는 제공되지 않습니다.

EditText에서 inputType을 제거하고 편집 가능한 = false를 사용하여 정상적으로 작동합니다.

단답형:사용했습니다.android:focusable="false"그리고 그것은 성공하였다.클릭 듣기도 지금 작동 중입니다.

저는 대화를 통해 이 문제를 해결합니다.

    AlertDialog dialog;
    EditText _editID;
    TextView _txtID;

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_principal);
        _txtID = (TextView) findViewById(R.id._txtID);
        dialog = new AlertDialog.Builder(this).create();
        _editID = new EditText(this);
        _editID.setInputType(InputType.TYPE_NUMBER_FLAG_SIGNED);
        dialog.setTitle("Numero do Registro:");
        dialog.setView(_editID);
        dialog.setButton(DialogInterface.BUTTON_POSITIVE, "IR", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                _txtID.setText(_editID.getText());
                toId(Integer.parseInt((_editID.getText().toString())));
            }
        });
        dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "CANCELAR", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });

        _txtID.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                _txtID.setText("_editID.getText()");
                //_editID.setText("");
                dialog.show();

            }
        });

코틀린 확장 옵션:

fun AppCompatAutoCompleteTextView.setEditable(editable: Boolean) {
    if (!editable) {
        this.tag = this.keyListener
        this.keyListener = null
    } else {
        if(this.tag is KeyListener) {
            this@setEditable.keyListener = this@setEditable.tag as KeyListener
        }
    }
}

다음과 같은 방법으로 편집 가능한 텍스트를 전환할 수 있습니다.

public void toggleEditableOfEditText(EditText editText){
        if (editText.getKeyListener() != null) {
            editText.setTag(editText.getKeyListener());
            editText.setKeyListener(null);
        } else {
            editText.setKeyListener((KeyListener) editText.getTag());
        }
    }

다음 방법을 사용하여 편집 텍스트를 편집할 수 있거나 편집할 수 없도록 만듭니다.

toggleEditableOfEditText(editText);

해라

.setInputType(InputType.TYPE_NULL);

이 코드를 사용해 보세요.제 프로젝트에서 작동하고 있으니, 당신의 프로젝트에서도 작동할 것입니다.

android:editable="false"

언급URL : https://stackoverflow.com/questions/3928711/how-to-make-edittext-not-editable-through-xml-in-android

반응형