Czy można EditText
kliknąć, ale nie można go edytować.
Nie chcę, aby było edytowalne (ani klawiatura nie powinna się pojawić, ani nie powinniśmy być w stanie zmienić podpowiedzi)
Właściwie chcę użyć Edytuj tekst po prostu jako obraz z podpowiedzią (której nie można zmienić). Wiem, że rzeczywisty sposób polegał na użyciu ImageView
i jedynki TextView
, ale chcę to wypróbować, EditText
ponieważ będę wtedy używał tylko jednego widoku zamiast 2. Poza tym wszystko jest dynamiczne, więc nie ma XML.
W przypadku powyższego wymagania rozwiązanie w XML jest, android:editable="false"
ale chcę użyć tego w Javie.
Ale,
Jeśli używam: -
et.setEnabled(false);
lub
et.setKeyListener(null);
Czyni to EditText
nieedytowalnym, ale jednocześnie nieklikalnym.
android
android-layout
android-edittext
Aamir Shah
źródło
źródło
et.setClickable(true)
? To może zadziałać.Odpowiedzi:
Oto sztuczka: -
et.setFocusable(false); et.setClickable(true);
źródło
można ustawić
EditText
za pomocą kodu java w następujący sposób: -edittext.setFocusable(false); edittext.setClickable(true);
lub używając poniższego kodu w pliku XML dla
EditText
.android:editable="false" android:inputType="none"
źródło
Jak
editable
jest przestarzałe. możesz użyćandroid:inputType
jako none w projektowaniu xml lub jako InputType.TYPE_NULL w kodowaniu.<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);
A poniżej jest zdarzenie kliknięcia
edittext
edt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(YourActivity.this,"edt click", Toast.LENGTH_LONG).show(); } });
źródło
Możesz użyć tego ...
android:focusableInTouchMode="false"
aby edittext nie był edytowalny w xml, a dla zdarzenia klikalnego możesz użyć zdarzenia setOnTouchListener () , aby zrobić to samo, co ...
editText.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub //do your stuff here.. return false; } });
źródło
android:focusableInTouchMode="false"
to, że jest to wymagane (android:focusable="false"
samo nie działa) w Androidzie O. Przynajmniej w DP2.android:editable
jest przestarzały, ale możesz zrobić stg jak poniżej:android:editable="false" android:focusable="false" android:focusableInTouchMode="false"
Użyłem powyższego cade do edycji, w których używam zbieraczy do ustawiania danych. Możesz użyć układu wejściowego z tym.
źródło
Edittext
włączać i wyłączać dla takiej edycjiEditText edit = (EditText) findviewby(R.id.edittext);
edit.setEnabled(false); //non editable edit.setEnabled(true); //editable
<EditText android:id="@+id/otp_mpin" android:layout_width="fill_parent" android:layout_height="wrap_content" android:editable="false" android:focusable="false"/>
źródło
Dla mnie żadna z odpowiedzi nie zaowocowała w pełni działającym rozwiązaniem.
Prezentacja mojej poprawki https://www.youtube.com/watch?v=oUA4Cuxfdqc
Przewodnik (przyjazny dla noobów) , zwróć uwagę na kilka komentarzy w kodzie.
Utwórz klasę Java dla niestandardowej o
EditText
nazwie EditTextDispatched.javaimport 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; } }
Odwołaj się do
EditTextDispatched
w swoim xml (będziesz musiał zmienić nazwę 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" />
Przywoływać:
private void changeEditTextBehaviour(EditTextDispatched value, boolean editable) { value.setEditable(editable); value.setEnabled(editable); }
źródło
Może możesz spróbować
editText.setEnabled(false);
źródło
Wiem, że na to pytanie już udzielono odpowiedzi, ale aby udzielić bardziej aktualnej (np. 2018) odpowiedzi, oto konfiguracja, której używam, aby osiągnąć żądany (tj. Niewprowadzany lub edytowalny) efekt:
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) { }
Tak, to jest ANKO, ponieważ nie używam już XML w żadnym z moich projektów Androida. Właściwość „inputType” zajmuje się wycofaniem „isEditable”.
źródło
Od 2020 r., Jeśli zależy Ci również na dostępności, powinieneś unikać ustawiania
et.setFocusable(false);
ponieważ spowoduje to, że EdycjaTekstu będzie niedostępna za pomocą nawigacji z klawiatury.Oto moje rozwiązanie:
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 }
źródło
możesz także zrobić
android:inputMethod="@null"
w swoimEditText
i nie pokaże kursora ani klawiatury, a następnie możesz łatwo uchwycić kliknięcie przez ustawienie słuchacza.źródło