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.

53
demandé sur musica 2012-12-30 16:31:10

10 réponses

L'astuce ici est : -

et.setFocusable(false);
et.setClickable(true);
116
répondu Aamir Shah 2012-12-30 13:30:40

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"  
16
répondu abhi 2014-01-21 05:08:12

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;
    }
});
7
répondu ridoy 2012-12-30 14:17:44

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.

3
répondu savepopulation 2016-04-18 11:18:49
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"/>
1
répondu Kishore Reddy 2017-06-20 10:55:49

, 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();
    }
});
1
répondu Nirav Bhavsar 2018-08-09 16:54:34

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);
}
0
répondu Martin Pfeffer 2017-03-26 10:52:44

Peut-être que vous pouvez essayer

editText.setEnabled(false);
0
répondu 默默磊OK 2018-01-21 09:53:03

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'.

0
répondu SilSur 2018-07-04 19:32:25

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.

-1
répondu SaadurRehman 2016-09-22 10:42:11