편집 텍스트를 편집 할 수 없지만 JAVA에서 클릭 할 수있게 만드는 방법


91

EditText클릭 가능하게 만들 수 있지만 편집 할 수는 없습니까?

편집 할 수 있기를 원하지 않습니다 (키보드가 나오거나 힌트를 변경할 수 없어야합니다).

실제로 편집 텍스트를 힌트가있는 이미지로 사용하고 싶습니다 (변경할 수 없음). 실제 방법은 an ImageViewand one 을 사용하는 TextView것이었지만 EditText2 대신 하나의 뷰만 사용할 것이기 때문에 시도해보고 싶습니다 . 또한 모든 것이 동적이므로 XML이 없습니다.

위의 요구 사항에 대해 XML의 솔루션은 android:editable="false"있지만 Java에서 이것을 사용하고 싶습니다.

그러나,

내가 사용하면 :-

et.setEnabled(false);

또는

 et.setKeyListener(null);

그것은 편집 가능 EditText하지 않지만 동시에 클릭 불가능하게 만듭니다.


설정은 et.setClickable(true)어떻습니까? 작동 할 수 있습니다.
Hein

이미 시도했습니다 ....하지만 작동하지 않았습니다 ... 다른 생각
Aamir Shah

1
상대적인 레이아웃을 사용하고 편집 텍스트의 맨 위에 빈 사각형이나 무언가를 놓고 사각형에 클릭 할 수있는 것을 시도합니다.
Wops

답변:


168

여기서 트릭은 :-

et.setFocusable(false);
et.setClickable(true);

5
당신이 어떤 분야에서 어떤 값을 복사 한 경우하지만 당신은 LANG 탭을 눌러 그 값 듣는을 붙여 제거하는 방법에 어떤 생각 .. 붙여 넣을 수 있습니다
Rishabh 인스 아그라 왈에게

11
@ANinJa 긴 클릭 가능을 false로 설정할 수 있습니다. 즉, et.setLongClickable (false);
Luis

흠, 커서가 클릭 / 롱 클릭시 이상한 방식으로 강조 표시됩니다.하지만 더 나은 방법은 없습니다. : /
마틴 페퍼

1
완전한! 당신은뿐만 아니라 / 붙여 넣기 피하기 사본 et.setLongClickable (거짓)를 추가해야 할 수도 있습니다
thanhbinh84

1
완벽 해, 당신은 의사입니까?
Iman Marashi 19

22

다음 EditText과 같이 Java 코드를 사용하여 설정할 수 있습니다 .

edittext.setFocusable(false);
edittext.setClickable(true);

또는 .NET 용 XML 파일에서 아래 코드를 사용하여 EditText.

android:editable="false" 
android:inputType="none"  

22

같이 editable 사용되지 않습니다. xml 디자인에서 none 으로 사용 하거나 코딩에서 InputType.TYPE_NULLandroid:inputType 로 사용할 수 있습니다 .

XML 디자인

<android.support.v7.widget.AppCompatEditText
    android:id="@+id/edt"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:clickable="true"
    android:focusable="false"
    android:inputType="none"
    android:text="EditText"/>

코딩

edt.setClickable(true);
edt.setFocusable(false);
edt.setInputType(InputType.TYPE_NULL);

아래는 클릭 이벤트입니다. edittext

edt.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Toast.makeText(YourActivity.this,"edt click", Toast.LENGTH_LONG).show();
    }
});

나를위한 매력처럼 일했다
Karim Bibars

8

이것을 사용할 수 있습니다 ..

android:focusableInTouchMode="false"

xml에서 edittext를 편집 할 수 없도록 만들고 클릭 가능한 이벤트의 경우 setOnTouchListener () 이벤트를 사용 하여 같은 작업을 수행 할 수 있습니다 .

editText.setOnTouchListener(new OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // TODO Auto-generated method stub
                        //do your stuff here..
        return false;
    }
});

1
Android O android:focusableInTouchMode="false"에서도 필수 ( android:focusable="false"혼자서 작동하지 않음) 처럼 보입니다 . 적어도 DP2에서는.
xip

7

android:editable 더 이상 사용되지 않지만 아래와 같이 stg를 수행 할 수 있습니다.

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

데이터를 설정하기 위해 선택기를 사용하는 edittexts에 위의 cade를 사용했습니다. 입력 레이아웃을 사용할 수 있습니다.


7

Edittext 이와 같은 편집에 대해 활성화 및 비활성화

EditText edit = (EditText) findviewby(R.id.edittext);

자바 코드를 통해

edit.setEnabled(false); //non editable
edit.setEnabled(true); //editable

XML을 통해

<EditText
    android:id="@+id/otp_mpin"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:editable="false"
    android:focusable="false"/>

0

나에게 어떤 답변도 완벽하게 작동하는 솔루션을 얻지 못했습니다.

내 수정 쇼케이스 https://www.youtube.com/watch?v=oUA4Cuxfdqc

가이드 (noob-friendly) , 코드의 몇 가지 주석에 유의하십시오.

EditTextDispatched.javaEditText 라는 사용자 정의에 대한 Java 클래스를 만듭니다.

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.RelativeLayout;

/**
 * @author Martin Pfeffer
 * @see <a href="https://celox.io">https://celox.io</a>
 */
public class EditTextDispatched extends android.support.v7.widget.AppCompatEditText {

    private static final String TAG = "DispatchingEditText";

    private boolean editable = true;

    public EditTextDispatched(Context context) {
        super(context);
    }

    public EditTextDispatched(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public EditTextDispatched(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    // get the current state
    public boolean isEditable() {
        return editable;
    }

    // set your desired behaviour
    public void setEditable(boolean editable) {
        this.editable = editable;
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent motionEvent) {

        if (editable) {
            // default behaviour of an EditText
            super.dispatchTouchEvent(motionEvent);
            return true;
        }

        // achieve the click-behaviour of a TextView (it's cuztom)
        ((RelativeLayout) getParent()).onTouchEvent(motionEvent);
        return true;
    }

}

EditTextDispatchedxml에서를 참조하십시오 (pgk 이름을 변경해야합니다).

  <io.celox.brutus.EditTextDispatched
    android:id="@+id/row_field_value"
    style="@style/row_field_text_display"
    android:layout_alignParentBottom="true"
    android:text="@string/sample_field_value" />

호출하려면 :

private void changeEditTextBehaviour(EditTextDispatched value, boolean editable) {
    value.setEditable(editable);
    value.setEnabled(editable);
}


0

이 질문에 대한 답변이 이미 있다는 것을 알고 있지만 더 최신 (예 : 2018 년) 답변을 제공하기 위해 요청 된 (예 : 비 입력 또는 편집 가능) 효과를 얻기 위해 사용하는 설정이 있습니다.

    val etUserLoc: EditText = themedEditText(R.style.Pale_Blue_Text_Bold_13) {
                id = R.id.et_comp_user_keys_var_user_location
                inputType = InputType.TYPE_NULL
                isClickable = true
                isFocusable = false
                textColor = resources.getColor(R.color.magenta)  // overrides the default theme color
                text = Editable.Factory.getInstance().newEditable(resources.getString(R.string.loc_swakopmund))
            }.lparams(width = matchConstraint, height = matchParent) {   }

예, Android 프로젝트에서 더 이상 XML을 사용하지 않기 때문에 이것은 ANKO입니다. 'inputType'은 'isEditable'지원 중단을 처리합니다.


0

2020 년부터 접근성에 관심 et.setFocusable(false);이있는 경우 키보드 탐색을 사용하여 EditText에 연결할 수 없게되므로 설정을 피해야합니다 .

내 해결책은 다음과 같습니다.

Kotlin

editText.isFocusableInTouchMode = false

editText.isLongClickable = false //this will prevent copy and paste

editText.setOnClickListener {
   // handle the click
   // this will automatically make the edittext clickable = true
}

-1

당신은 또한 할 수있는 android:inputMethod="@null"당신에 EditText그것은 커서 또는 키보드를 표시하지 않습니다 그리고 당신은 쉽게 리스너를 설정을 통해 클릭을 파악 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.