Comment faire pour modifier le texte non modifiable mais cliquable en JAVA
Est-il possible de rendre EditText
cliquable mais non modifiable.
Je ne veux pas qu'il soit modifiable (le clavier ne devrait pas apparaître et nous ne devrions pas être en mesure de 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 façon réelle était d'utiliser un ImageView
et un TextView
, mais je veux qu'il essaie avec EditText
parce que je n'utiliserai alors qu'une seule vue au lieu de 2. Aussi tout est dynamique donc pas de XML.
Pour ce qui précède exigence la solution en XML est android:editable="false"
mais je veux l'utiliser en Java.
Mais,
Si j'utilise :-
et.setEnabled(false);
Ou
et.setKeyListener(null);
Cela rend le EditText
non modifiable mais en même temps il le rend non cliquable.
10 réponses
L'astuce ici est : -
et.setFocusable(false);
et.setClickable(true);
Vous pouvez définir EditText
en utilisant le code java comme jachère: -
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 modifiable en xml.Et pour l'événement cliquable, vous pouvez utiliser setOnTouchListener () event pour faire la même chose que like..
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 le faire stg comme ci-dessous:
android:editable="false"
android:focusable="false"
android:focusableInTouchMode="false"
J'ai utilisé le cade ci-dessus pour edittexts que j'utilise des sélecteurs pour définir des données. Vous pouvez utiliser la disposition d'entrée avec ceci.
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"/>
, Comme editable
est obsolète. vous pouvez utiliser android:inputType
comme none dans la conception de xml ou InputType.TYPE_NULL {[8] } dans le codage.
Conception 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 est l'événement de clic de edittext
edt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(YourActivity.this,"edt click", Toast.LENGTH_LONG).show();
}
});
Pour moi, aucune des réponses n'a abouti à une solution complètement fonctionnelle.
Vitrine 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 un EditText
personnalisé appelé 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 le EditTextDispatched
dans votre xml (vous devrez modifier le nom 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" />
Pour invoquer:
private void changeEditTextBehaviour(EditTextDispatched value, boolean editable) {
value.setEditable(editable);
value.setEnabled(editable);
}
Je sais que cette question a déjà été répondue mais pour donner une réponse plus actuelle (c'est-à-dire 2018), voici la configuration que j'utilise pour obtenir l'effet demandé (c'est-à-dire non-input ou modifiable):
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'.
Vous pouvez également faire android:inputMethod="@null"
dans votre EditText
et il n'affichera pas le curseur ou le clavier, puis vous pouvez facilement saisir le clic à travers l'écouteur de réglage.