it-swarm.com.de

Deaktivieren von EditText in Android

In meiner Anwendung habe ich einen EditText. Ich möchte, dass der Benutzer nur Lesezugriff hat, und nicht Schreibzugriff. In Code setze ich Android:enabled="false". Obwohl der Hintergrund von EditText zu dunkel wurde, öffnet sich die Tastatur und ich kann den Text ändern, wenn ich darauf klicke.

Was soll ich tun? Danke

157
Hesam

Ich glaube, das Richtige wäre, Android:editable="false" zu setzen.

Und wenn Sie sich fragen, warum mein Link auf die Attribute von TextView verweist, dann lautet die Antwort, dass EditText von TextView erbt:

EditText ist ein dünnes Furnier über TextView, das sich selbst als .__ konfiguriert. bearbeitbar.

Update:
Wie in den folgenden Kommentaren erwähnt, ist editable veraltet ( seit API-Ebene 3 ). Verwenden Sie stattdessen inputType (mit dem Wert none).

205
Julian

verwenden Sie EditText.setFocusable(false), um die Bearbeitung zu deaktivieren
EditText.setFocusableInTouchMode(true), um die Bearbeitung zu ermöglichen;

146
Sean Android

Verwenden Sie diese Option, um die Benutzereingabe zu deaktivieren 

Android:focusable="false"

Android: editable = "false" Diese Methode ist veraltet.

54
Sampath Kumar

Sie können die folgende Methode ausprobieren:

 private void disableEditText(EditText editText) {
    editText.setFocusable(false);
    editText.setEnabled(false);
    editText.setCursorVisible(false);
    editText.setKeyListener(null);
    editText.setBackgroundColor(Color.TRANSPARENT); 
 }

Aktivierter EditText:

Enabled EditText

Deaktivierter EditText:

Disabled EditText

Es funktioniert für mich und ich hoffe es hilft dir.

47
Maksym Kalin

Zum Deaktivieren von edit EditText können wir focusableODERenable verwenden

  1. Android:enabled=... oder editText.setEnabled(...) verwenden

    Es wird auch ändern die Textfarbe in EditText in grau.
    Wenn Sie klicken, hat es keine Auswirkung

  2. Android:focusable=... oder editText.setFocusable(false) verwenden - editText.setFocusableInTouchMode(true)

    Es nicht ändern Textfarbe von EditText
    Wenn Sie darauf klicken, markieren Sie die EditText-Zeile für einige Millisekunden

Ausgabe

 enter image description here

19
Linh

Da Android:editable="false" depricated ist, können Sie InputType TYPE_NULL bei EditText verwenden

Verwendung wie folgt:

editText.setInputType(InputType.TYPE_NULL);
17
Bhargav Pandit

Als Android:editable="false" veraltet In XML

Verwenden Sie Android:enabled="false" einfach. Warum mehr Code verwenden?

Wenn Sie in der Java-Klasse möchten, können Sie sie auch programmgesteuert in der Java-Klasse verwenden

editText.setEnabled (false);

15
android_jain

Einfach:

editText.setEnabled(false);
9
Oded Breiner

Legen Sie die folgenden Eigenschaften in der Klasse fest:

editText.setFocusable(false);
editText.setEnabled(false);

Es funktioniert reibungslos wie Sie es benötigen.

5
Rank

wenn Sie Android:editable="false" verwenden, erinnert Sie Eclipse an die Meldung "Android: editable ist veraltet: Verwenden Sie stattdessen inputType".

Ich benutze stattdessen Android:focusable="false", es hat gut für mich funktioniert.

4
wangzhengyi

Verwenden Sie stattdessen TextView.

4
cx0der
Android:editable="false"

ist jetzt veraltet und wird verwendet

 YourEditText.setInputType(InputType.TYPE_NULL);
2
eranda methmal

Probieren Sie diese aus, funktioniert gut für mich:

public class CustomEdittext extends EditText {

Boolean mIsTextEditor=true;
public CustomEdittext(Context context, AttributeSet attrs) {
    super(context, attrs);
    // TODO Auto-generated constructor stub
}

@Override
public boolean onCheckIsTextEditor() {
    // TODO Auto-generated method stub
    return mIsTextEditor;
}


@Override
public boolean onTouchEvent(MotionEvent event) {
    // TODO Auto-generated method stub
    mIsTextEditor=false;
    Boolean mOnTouchEvent=super.onTouchEvent(event);
    mIsTextEditor=true;     
    return mOnTouchEvent;
} }

Hinweis: Sie müssen this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); Zu Ihrer Aktivität hinzufügen, andernfalls wird die Tastatur beim ersten Mal angezeigt.

1
Favas Kv

Dadurch wird Ihr Edittext deaktiviert .

editText.setEnabled(false);

Und mit diesem 

editText.setInputType(InputType.TYPE_NULL);

Wird nur Ihr Edittext nicht Show Ihr Softkeyboard machen, aber wenn es an eine physische Tastatur angeschlossen ist, können Sie es eingeben.

1
Mark Fajardo

In meinem Fall brauchte ich meine EditText, um den Text zu scrollen, falls nein. Zeilen überschreiten maxLines, wenn sie deaktiviert sind. Diese Implementierung hat für mich perfekt funktioniert.

private void setIsChatEditTextEditable(boolean value)
{
    if(value)
    {
        mEdittext.setCursorVisible(true);
        mEdittext.setSelection(chat_edittext.length());
       // use new EditText(getApplicationContext()).getKeyListener()) if required below
        mEdittext.setKeyListener(new AppCompatEditText(getApplicationContext()).getKeyListener());  
    }
    else
    {
        mEdittext.setCursorVisible(false);
        mEdittext.setKeyListener(null);
    }
}
1
Rishabh876

sie können Android:focusable="false" verwenden, müssen aber auch den Cursor deaktivieren, da sonst die Kopier-/Einfügefunktion __ funktionieren würde. 

also verwenden

Android:focusable="false"
Android:cursorVisible="false"
0
M.Usman

Heute benutze ich noch editable="false", aber auch mit focusable="false".

Ich denke, der Fall, dass wir einen EditText nicht editierbar machen müssen, liegt daran, dass wir den EditText-Stil beibehalten möchten (mit Unterstreichung, mit Hinweis usw.), aber andere Eingaben anstelle von Text akzeptieren. Zum Beispiel eine Dropdown-Liste.

In diesem Anwendungsfall muss die Variable EditText anklickbar sein (daher ist enabled="false" nicht geeignet). Wenn Sie focusable="false" tun, tun Sie diesen Trick jedoch Ich kann den EditText noch lange halten und meinen eigenen Text aus der Zwischenablage einfügen . Je nach Code und Handhabung kann dies sogar zum Absturz der App führen.

Also habe ich auch editable="false" verwendet und jetzt ist alles super, außer der Warnung.

0
Sira Lam

Als Antwort darauf, wenn Sie den editText deaktivieren, wird er grau und wenn Sie fokussierbar auf false setzen, wird der Cursor angezeigt.

Wenn Sie es nur mit XML tun möchten, ist dies der Trick

       <YourFloatLabel
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content">

            <EditText
                Android:id="@+id/view_ads_search_select"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content" />

            <FrameLayout
                Android:layout_width="match_parent"
                Android:layout_height="match_parent"
                Android:focusable="true"
                Android:clickable="true"/>  
       </YourFloatLabel>

Ich füge einfach ein FrameLayout hinzu, das über dem editText angezeigt wird, und kann fokussierbar und anklickbar sein, sodass der editText nicht angeklickt werden kann. 

0
Vodet

Um die Funktionalität eines EditText zu deaktivieren, verwenden Sie einfach:

EditText.setInputType(InputType.TYPE_NULL);

falls Sie es auf irgendeine Weise aktivieren möchten, können Sie Folgendes verwenden:

EditText.setInputType(InputType.TYPE_CLASS_TEXT);
0
Samaritan

Verwenden Sie aus @ Asymptotes Kommentar zur akzeptierten Antwort Folgendes:

myEditText.setEnabled(false);
myEditText.setInputType(InputType.TYPE_NULL);

... und Bob ist dein Onkel.

0
Tom Howard

Es gibt mehrere Möglichkeiten, um mehrere Ebenen von Behinderten zu erreichen.

  • editText.setShowSoftInputOnFocus(false); und editText.setFocusable

verhindert, dass das EditText die Tastatur anzeigt und Text eingibt. Der Cursor ist jedoch weiterhin sichtbar und der Benutzer kann Text einfügen.

  • editText.setCursorVisible(false)

verbirgt den Cursor. Ich bin mir nicht sicher, warum du das tun möchtest. Der Benutzer kann Text eingeben und einfügen.

  • editText.setKeyListener(null)

Ich finde diesen Weg am bequemsten. Es gibt keine Möglichkeit, wie der Benutzer Text eingeben kann, aber das Widget funktioniert weiterhin mit OnClickListener, wenn Sie eine Aktion auslösen möchten, wenn der Benutzer sie berührt

  • editText.setEnabled(false);

deaktiviert EditText vollständig. Es ist buchstäblich 'schreibgeschützt', der Benutzer kann keinen Text eingeben und (zum Beispiel) OnClickListener funktioniert nicht es.

TextEdit Dokumentation

0
DeepBlue