EditText
클릭 가능하게 만들 수 있지만 편집 할 수는 없습니까?
편집 할 수 있기를 원하지 않습니다 (키보드가 나오거나 힌트를 변경할 수 없어야합니다).
실제로 편집 텍스트를 힌트가있는 이미지로 사용하고 싶습니다 (변경할 수 없음). 실제 방법은 an ImageView
and one 을 사용하는 TextView
것이었지만 EditText
2 대신 하나의 뷰만 사용할 것이기 때문에 시도해보고 싶습니다 . 또한 모든 것이 동적이므로 XML이 없습니다.
위의 요구 사항에 대해 XML의 솔루션은 android:editable="false"
있지만 Java에서 이것을 사용하고 싶습니다.
그러나,
내가 사용하면 :-
et.setEnabled(false);
또는
et.setKeyListener(null);
그것은 편집 가능 EditText
하지 않지만 동시에 클릭 불가능하게 만듭니다.
답변
여기서 트릭은 :-
et.setFocusable(false);
et.setClickable(true);
답변
다음 EditText
과 같이 Java 코드를 사용하여 설정할 수 있습니다 .
edittext.setFocusable(false);
edittext.setClickable(true);
또는 .NET 용 XML 파일에서 아래 코드를 사용하여 EditText
.
android:editable="false"
android:inputType="none"
답변
같이 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();
}
});
답변
이것을 사용할 수 있습니다 ..
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;
}
});
답변
android:editable
더 이상 사용되지 않지만 아래와 같이 stg를 수행 할 수 있습니다.
android:editable="false"
android:focusable="false"
android:focusableInTouchMode="false"
데이터를 설정하기 위해 선택기를 사용하는 edittexts에 위의 cade를 사용했습니다. 입력 레이아웃을 사용할 수 있습니다.
답변
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"/>
답변
나에게 어떤 답변도 완벽하게 작동하는 솔루션을 얻지 못했습니다.
내 수정 쇼케이스 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;
}
}
EditTextDispatched
xml에서를 참조하십시오 (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);
}