Est-il possible de rendre EditText
cliquable mais non modifiable?.
Je ne veux pas que ce soit éditable (le clavier ne devrait pas non plus apparaître ni nous ne devrions pouvoir changer l'indice)
En fait, je veux utiliser Edit text simplement comme une image avec un indice (qui ne peut pas être changé). Je sais que la méthode réelle consistait à utiliser une variable ImageView
et une variable TextView
, mais je veux qu'elle essaye avec EditText
car je n'utiliserai alors qu'une seule vue au lieu de 2. De plus, tout est dynamique, donc aucun XML.
Pour la condition ci-dessus, la solution en XML est Android:editable="false"
mais je souhaite l’utiliser en Java.
Mais,
Si j'utilise: -
et.setEnabled(false);
ou
et.setKeyListener(null);
Cela rend la EditText
non ÉDITABLE, mais en même temps, elle est également non cliquable.
Le truc ici est: -
et.setFocusable(false);
et.setClickable(true);
vous pouvez définir EditText
en utilisant le code Java comme suit: -
edittext.setFocusable(false);
edittext.setClickable(true);
ou en utilisant le code ci-dessous dans le fichier XML pour EditText
.
Android:editable="false"
Android:inputType="none"
Vous pouvez utiliser ceci ..
Android:focusableInTouchMode="false"
pour rendre edittext non éditable dans xml.And et pour un événement cliquable, vous pouvez utiliser setOnTouchListener () event pour faire la même chose que.
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
est obsolète mais vous pouvez faire comme ci-dessous:
Android:editable="false"
Android:focusable="false"
Android:focusableInTouchMode="false"
J'ai utilisé le cade ci-dessus pour les éditions que j'utilise avec des sélecteurs pour définir les données. Vous pouvez utiliser la disposition d'entrée avec cela.
Comme editable
est obsolète. vous pouvez utiliser Android:inputType
comme none lors de la conception de xml ou comme InputType.TYPE_NULL dans le codage.
Concevoir du 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"/>
Codage
edt.setClickable(true);
edt.setFocusable(false);
edt.setInputType(InputType.TYPE_NULL);
Et ci-dessous se trouve l'événement click de edittext
edt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(YourActivity.this,"edt click", Toast.LENGTH_LONG).show();
}
});
Edittext
activer et désactiver pour l'édition comme celle-ci
EditText edit = (EditText) findviewby(R.id.edittext);
À travers le code Java
edit.setEnabled(false); //non editable
edit.setEnabled(true); //editable
À travers xml
<EditText
Android:id="@+id/otp_mpin"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:editable="false"
Android:focusable="false"/>
Peut-être que vous pouvez essayer
editText.setEnabled(false);
Pour moi, aucune des réponses n'a abouti à une solution totalement opérationnelle.
Présentation de mon correctif https://www.youtube.com/watch?v=oUA4Cuxfdqc
Guide (noob-friendly), veuillez noter les quelques commentaires dans le code.
Créez une classe Java pour une EditText
personnalisée appelée 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's cuztom)
((RelativeLayout) getParent()).onTouchEvent(motionEvent);
return true;
}
}
Référencez la EditTextDispatched
dans votre fichier xml (vous devrez modifier le nom du 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" />
Invoquer:
private void changeEditTextBehaviour(EditTextDispatched value, boolean editable) {
value.setEditable(editable);
value.setEnabled(editable);
}
Je sais que cette question a déjà reçu une réponse, mais pour donner une réponse plus actuelle (2018), voici la configuration que j'utilise pour obtenir l'effet demandé (c'est-à-dire, sans saisie ni modification):
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) { }
Oui, c’est ANKO puisque je n’utilise plus XML dans aucun de mes projets Android. Le 'inputType' prend en charge la dépréciation 'isEditable'.