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
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
).
verwenden Sie EditText.setFocusable(false)
, um die Bearbeitung zu deaktivierenEditText.setFocusableInTouchMode(true)
, um die Bearbeitung zu ermöglichen;
Verwenden Sie diese Option, um die Benutzereingabe zu deaktivieren
Android:focusable="false"
Android: editable = "false" Diese Methode ist veraltet.
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:
Deaktivierter EditText:
Es funktioniert für mich und ich hoffe es hilft dir.
Zum Deaktivieren von edit EditText
können wir focusable
ODERenable
verwenden
Android:enabled=...
oder editText.setEnabled(...)
verwenden
Es wird auch ändern die Textfarbe in EditText
in grau.
Wenn Sie klicken, hat es keine Auswirkung
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
Da Android:editable="false"
depricated ist, können Sie InputType TYPE_NULL bei EditText verwenden
Verwendung wie folgt:
editText.setInputType(InputType.TYPE_NULL);
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);
Einfach:
editText.setEnabled(false);
Legen Sie die folgenden Eigenschaften in der Klasse fest:
editText.setFocusable(false);
editText.setEnabled(false);
Es funktioniert reibungslos wie Sie es benötigen.
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.
Verwenden Sie stattdessen TextView
.
Android:editable="false"
ist jetzt veraltet und wird verwendet
YourEditText.setInputType(InputType.TYPE_NULL);
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.
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.
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);
}
}
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"
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.
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.
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);
Verwenden Sie aus @ Asymptotes Kommentar zur akzeptierten Antwort Folgendes:
myEditText.setEnabled(false);
myEditText.setInputType(InputType.TYPE_NULL);
... und Bob ist dein Onkel.
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