Apakah mungkin membuat EditText
dapat diklik tetapi tidak dapat diedit.
Saya tidak ingin itu dapat diedit (Keyboard harus muncul atau kami tidak dapat mengubah petunjuknya)
Sebenarnya saya ingin menggunakan Edit teks hanya sebagai gambar dengan petunjuk (yang tidak dapat diubah). Saya tahu cara sebenarnya adalah menggunakan satu ImageView
dan satu TextView
, tetapi saya ingin mencobanya EditText
karena saya akan menggunakan hanya satu tampilan, bukan 2. Juga semuanya dinamis jadi tidak ada XML.
Untuk persyaratan di atas, solusi dalam XML adalah android:editable="false"
tetapi saya ingin menggunakan ini di Java.
Tapi,
Jika saya menggunakan: -
et.setEnabled(false);
atau
et.setKeyListener(null);
Itu membuat EditText
tidak DAPAT DIEDIT tetapi pada saat yang sama juga membuatnya tidak dapat diklik.
android
android-layout
android-edittext
Aamir Shah
sumber
sumber
et.setClickable(true)
? Mungkin berhasil.Jawaban:
Triknya di sini adalah: -
et.setFocusable(false); et.setClickable(true);
sumber
Anda dapat mengatur
EditText
dengan menggunakan kode java sebagai berikut: -edittext.setFocusable(false); edittext.setClickable(true);
atau dengan menggunakan kode di bawah ini dalam file XML untuk
EditText
.android:editable="false" android:inputType="none"
sumber
Seperti yang
editable
sudah usang. Anda dapat menggunakanandroid:inputType
sebagai tidak ada dalam mendesain xml atau sebagai InputType.TYPE_NULL dalam pengkodean.<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);
Dan di bawah ini adalah acara klik
edittext
edt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(YourActivity.this,"edt click", Toast.LENGTH_LONG).show(); } });
sumber
Anda bisa menggunakan ini ..
android:focusableInTouchMode="false"
untuk membuat edittext tidak dapat diedit dalam xml. Dan untuk acara yang dapat diklik Anda dapat menggunakan acara setOnTouchListener () untuk melakukan hal yang sama seperti ..
editText.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub //do your stuff here.. return false; } });
sumber
android:focusableInTouchMode="false"
juga diperlukan (android:focusable="false"
saja tidak berfungsi) di Android O. Setidaknya, di DP2.android:editable
sudah usang tetapi Anda dapat melakukan stg seperti di bawah ini:android:editable="false" android:focusable="false" android:focusableInTouchMode="false"
Saya menggunakan cade di atas untuk edittexts yang saya gunakan pemetik untuk mengatur data masuk Anda dapat menggunakan tata letak input dengan ini.
sumber
Edittext
aktifkan dan nonaktifkan untuk pengeditan seperti iniEditText 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"/>
sumber
Bagi saya, tidak ada jawaban yang menghasilkan solusi yang benar-benar berfungsi.
Pamerkan perbaikan saya https://www.youtube.com/watch?v=oUA4Cuxfdqc
Panduan (ramah noob) , harap perhatikan beberapa komentar di kode.
Buat kelas Java untuk kustom yang
EditText
disebut 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; } }
Referensi
EditTextDispatched
dalam xml Anda (Anda harus mengubah nama 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" />
Untuk meminta:
private void changeEditTextBehaviour(EditTextDispatched value, boolean editable) { value.setEditable(editable); value.setEnabled(editable); }
sumber
Mungkin kamu bisa mencobanya
editText.setEnabled(false);
sumber
Saya tahu pertanyaan ini telah dijawab tetapi untuk memberikan jawaban yang lebih terkini (yaitu 2018) di sini adalah pengaturan yang saya gunakan untuk mencapai efek yang diminta (yaitu non-input atau diedit):
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) { }
Ya, ini ANKO karena saya tidak lagi menggunakan XML di Proyek Android saya. 'InputType' menangani penghentian 'isEditable'.
sumber
Pada tahun 2020, jika Anda juga peduli dengan aksesibilitas, Anda harus menghindari pengaturan
et.setFocusable(false);
karena itu akan membuat EditText tidak dapat dijangkau menggunakan navigasi Keyboard.Inilah solusi saya:
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 }
sumber
Anda juga dapat melakukannya
android:inputMethod="@null"
di AndaEditText
dan itu tidak akan menampilkan kursor atau keyboard dan kemudian Anda dapat dengan mudah memahami pendengar klik melalui pengaturan.sumber