Как сделать редактируемый текст не редактируемым, а кликабельным на JAVA
можно сделать EditText кликабельный, но не редактируемый.
Я не хочу, чтобы он был редактируемым (ни клавиатура не должна подниматься, ни мы должны быть в состоянии изменить подсказку)
На самом деле я хочу использовать редактировать текст просто как изображение с подсказкой (которая не может быть изменена). Я знаю, что фактический способ был использовать ImageView и TextView, но я хочу попробовать с EditText потому что тогда я буду использовать только один вид вместо 2. Также все вещи динамичны, так что нет XML.
для вышеуказанного требования решение в XML является android:editable="false" но я хочу использовать это в Java.
а,
если я использую :-
et.setEnabled(false);
или
et.setKeyListener(null);
это делает EditText не редактируется, но в то же время это делает его не кликабельным, а также.
10 ответов:
вы можете установить
EditTextС помощью java-кода как под паром : -edittext.setFocusable(false); edittext.setClickable(true);или с помощью кода ниже в XML-файле для
EditText.android:editable="false" android:inputType="none"
Вы можете использовать это..
android:focusableInTouchMode="false"чтобы сделать edittext не редактируемым в xml.И для кликабельного события вы можете использовать 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"я использовал cade выше для редактирования текстов, которые я использую сборщики для установки данных. Вы можете использовать макет ввода с этим.
edittext enable and disable for the edit like this EditText edit = (EditText) findviewby(R.id.edittext); through java edit.setEnabled(false); //non editable edit.setEnabled(true); //editable through xml <EditText android:id="@+id/otp_mpin" android:layout_width="fill_parent" android:layout_height="wrap_content" android:editable="false" android:focusable="false"/>
как
editable- Это исключено. вы можете использоватьandroid:inputTypeкак нет в проектировании xml или как InputType.TYPE_NULL в кодинге.проектирование 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);и ниже событие щелчка
edittextedt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(YourActivity.this,"edt click", Toast.LENGTH_LONG).show(); } });
для меня ни один из ответов не привел к полностью рабочему решению.
витрина моего исправления https://www.youtube.com/watch?v=oUA4Cuxfdqc
руководство (Noob-friendly), пожалуйста, обратите внимание на несколько комментариев в коде.
создать класс Java для пользовательского
EditTextпод названием 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; } }ссылка
EditTextDispatchedв вашем xml (вам придется изменить pgk-name):<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); }
Я знаю, что на этот вопрос уже был дан ответ, но чтобы дать более актуальный (т. е. 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) { }Да, это ANKO, так как я больше не использую XML в любом из моих проектов Android. 'InputType' заботится об' isEditable ' устаревании.
вы также можете сделать
android:inputMethod="@null"в своемEditTextи он не будет показывать курсор или клавиатуру, а затем вы можете легко понять щелчок через настройки слушателя.
Comments