Ответ 1
Трюк здесь: -
et.setFocusable(false);
et.setClickable(true);
Можно ли сделать EditText
доступным, но не редактируемым.
Я не хочу, чтобы он редактировался (также клавиатура не подходила, и мы не могли изменить подсказку)
На самом деле я хочу использовать Редактировать текст просто как изображение с подсказкой (которая не может быть изменена). Я знаю, что фактический способ состоял в использовании ImageView
и one TextView
, но я хочу, чтобы он попытался с EditText
, потому что вместо этого я буду использовать только одно представление вместо 2. Также каждая вещь является динамической, поэтому никакой XML.
Для вышеуказанного требования решение в XML android:editable="false"
, но я хочу использовать его в Java.
Но,
Если я использую: -
et.setEnabled(false);
или
et.setKeyListener(null);
Это делает EditText
not EDITABLE, но в то же время делает его не кликабельным.
Трюк здесь: -
et.setFocusable(false);
et.setClickable(true);
вы можете установить 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"
Я использовал приведенный выше код для edittexts, который я использую для выбора сборщиков. Вы можете использовать макет ввода с этим.
Для меня ни один из ответов не привел к полностью работающему решению.
Витрина моего исправления https://www.youtube.com/watch?v=oUA4Cuxfdqc
Путеводитель (нубо дружественный), обратите внимание на несколько комментариев в коде.
Создайте класс Java для пользовательского EditText
, называемого EditTextDispatched.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 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);
}
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"/>
вы также можете сделать android:inputMethod="@null"
в своем EditText
, и он не отобразит курсор или клавиатуру, а затем вы легко сможете захватить клик по настройке прослушивателя.