Jak sprawić, by EditText nie był edytowalny przez XML w Androidzie?

Czy ktoś może mi powiedzieć jak zrobić EditText nie edytowalną przez XML? Próbowałem ustawić android:editable na false, ale

  1. jest przestarzały; i
  2. Nie zadziałało.
Author: MC Emperor, 2010-10-14

24 answers

Użyj tego prostego kodu:

textView.setKeyListener(null);
To działa.

Edit: aby dodać KeyListener później, wykonaj następujące czynności

1: Ustaw klucz do znacznika textView

textView.setTag(textView.getKeyListener());
textView.setKeyListener(null);

2: pobranie słuchacza klucza z tagu i ustawienie go z powrotem na textView

textView.setKeyListener((KeyListener) textView.getTag());
 370
Author: Kristiono Setyadi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-25 12:25:54

Dodaj to do pliku XML EditText:

<EditText ...
        android:clickable="false" 
        android:cursorVisible="false" 
        android:focusable="false" 
        android:focusableInTouchMode="false">
</EditText>

Spowoduje to taki sam efekt jak android:editable="false". Dla mnie zadziałało, mam nadzieję, że dla ciebie też.

 347
Author: GalDude33,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-17 03:17:15

Niech Twój Edittext będzie

EditText editText;

editText.setKeyListener(null);

Będzie działać, ale po prostu nie słucha klawiszy.

Użytkownik widzi kursor w edytowanym tekście.

Możesz spróbować editText.setEnabled(false);

Oznacza to, że użytkownik nie może zobaczyć kursora. Po prostu powiedzieć, że stanie się TextView.

 54
Author: mahe madhi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-11 05:35:45

Disable from XML (one line):

 android:focusable="false"

Włącz ponownie z Javy, jeśli zajdzie taka potrzeba (również jedna linia):

editText.setFocusableInTouchMode(true);
 25
Author: kouretinho,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-06 17:28:00

Jak wspomniano w innych odpowiedziach, możesz zrobić setEnabled(false), ale ponieważ pytasz, Jak ustawić go za pomocą XML, oto jak to zrobić.

Dodaj następujący atrybut do twojego EditText:

android:enabled="false"
 22
Author: vida,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-09 15:49:16

Uczynili" editable " przestarzałym, ale nie dostarczyli działającego odpowiadającego w inputType.

Przy okazji, czy inputType= "none" ma jakiś wpływ? Używanie go czy nie, nie robi żadnej różnicy, o ile widzę.

Na przykład domyślny editText mówi się o pojedynczej linii. Ale musisz wybrać inputType, aby była to pojedyncza linia. A jeśli wybierzesz "brak", nadal jest on wielowierszowy.

 15
Author: Timuçin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-20 02:14:35

Jak wspomniałeś android: edytowalny jest przestarzały. android: inputType= "none" powinno być używane, ale nie działa z powodu błędu ( https://code.google.com/p/android/issues/detail?id=2854 )

Ale możesz osiągnąć to samo za pomocą focusable.

Via XML:

<EditText ...
        android:focusable="false" 
</EditText>

Z kodu:

((EditText) findViewById(R.id.LoginNameEditText)).setFocusable(false);
 13
Author: Adorjan Princz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-10 14:39:54

Jeśli chcesz go kliknąć, ale nie chcesz go edytować, spróbuj:

        android:focusable="false"
 11
Author: Kai Wang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-11 20:43:53

Ta kombinacja zadziałała dla mnie:

<EditText ... >
    android:longClickable="false"
    android:cursorVisible="false"
    android:focusableInTouchMode="false"
</EditText>
 7
Author: Massimo Fazzolari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-12 09:21:42

Jeśli chcesz to zrobić w kodzie Javy po prostu użyj tej linii, aby ją wyłączyć:

editText.setEnabled(false);

I to, aby go włączyć:

editText.setEnabled(true);
 6
Author: user3185897,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-27 20:20:17

Próbowałem zrobić:

textView.setInputType( InputType.TYPE_NULL );
Co powinno zadziałać, ale dla mnie nie.

Skończyłem z tym kodem:

textView.setKeyListener(new NumberKeyListener() {
    public int getInputType() {
        return InputType.TYPE_NULL;
    }

    protected char[] getAcceptedChars() {
        return new char[] {};
    }
});
Który działa idealnie.
 5
Author: saric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-05 10:56:59
<EditText
    android:id="@+id/txtDate"
    android:layout_width="140dp"
    android:layout_height="wrap_content"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="10dp"
    android:layout_marginTop="2dp"
    android:clickable="false"
    android:cursorVisible="false"
    android:gravity="center" />

I używać:

txtDate.setKeyListener(null);
 5
Author: askimp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-26 07:31:00

Po prostu użyj android:enabled="false". Spowoduje to również pojawienie się EditText, które sprawi, że będzie wyglądać na nie edytowalne.

 5
Author: Shahid Sarwar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-18 06:53:47

Przydałoby ci się android:editable="false" ale naprawdę bym ci doradził aby użyć setEnabled(false), ponieważ dostarcza użytkownikowi wizualnej wskazówki, że kontrolka nie może być edytowana. Ten sam sygnał wizualny jest używany przez wszystkich wyłączone widgety i spójność jest dobra.

 3
Author: jclafuente,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-20 15:24:59

Kiedy chcę, aby aktywność nie skupiała się na EditText, a także nie pokazywała klawiatury po kliknięciu, To mi się udało.

Dodawanie atrybutów do głównego układu

android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"

A następnie pole EditText

android:focusable="false"
android:focusableInTouchMode="false"

Oto przykład:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_home"
    android:background="@drawable/bg_landing"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="0dp"
    android:paddingLeft="0dp"
    android:paddingRight="0dp"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:descendantFocusability="beforeDescendants"
    android:focusableInTouchMode="true"
    tools:context="com.woppi.woppi.samplelapp.HomeActivity">

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@null"
        android:inputType="textPersonName"
        android:ems="10"
        android:id="@+id/fromEditText"
        android:layout_weight="1"
        android:hint="@string/placeholder_choose_language"
        android:textColor="@android:color/white"
        android:textColorHint="@android:color/darker_gray"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:onClick="onSelectFromLanguage" />

</RelativeLayout>
 3
Author: Woppi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-17 11:55:47

Próbowałem:

codeEditText.setInputType(InputType.TYPE_NULL);

this.codeEditText.setOnFocusChangeListener(new OnFocusChangeListener() {

  @Override
  public void onFocusChange(View v, boolean hasFocus) {

    if (hasFocus) {

      pickCode();

    }

  }

});
this.codeEditText.setOnClickListener(new OnClickListener() {

  @Override
  public void onClick(View v) {

    pickCode();

  }

});

Ale problem polegał na tym, że jeśli tekst edycji jest pierwszy w formie to otrzymuje kod focus i pickCode (), który uruchamia nową aktywność nazywa się od razu. Więc zmodyfikowałem kod w następujący sposób i wydaje się do dzialania calkiem dobrze (tyle ze nie moge ustawic ostrosci na edycji tekstu ale Nie muszę):

itemCodeEditText.setFocusable(false);

this.itemCodeEditText.setOnClickListener(new OnClickListener() {

  @Override
  public void onClick(View v) {

    pickItem();

  }

});

Pozdrawiam,

Komentarze mile widziane,

John Goche

 1
Author: johngoche9999,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-15 15:47:18

Oprócz @ mahe madi możesz też tego spróbować

editText.setEnabled(false);
editor.setTextColor(Color.BLACK);

Ta metoda ukryje kursor, straci ostrość i co ważniejsze ustawi kolor tekstu na czarny zachowując się jak TextView.

I aby powrócić do editText wystarczy to zrobić, aby uzyskać wszystkie właściwości EditText.

editText.setEnabled(true);

Mam nadzieję, że pomoże:)

 1
Author: Superuser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-30 10:24:56

Używam EditText.setFocusable(false) i ustawiam true ponownie, jeśli chcę edytować.

 1
Author: nobjta_9x_tq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-25 03:27:40

Android: edytowalny jest przestarzały, więc zamiast tego użyj inputType.

   <EditText
        android:id="@+id/editText_x"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="70"
        android:inputType="none"
        android:hint="@string/enter_x" />
 1
Author: M-Razavi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-11 16:20:44

Spróbuj tego:

android:inputType="none"
 1
Author: Rutvik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-21 01:17:06

W ten sposób wykonałem zadanie za mnie, mogę wybrać i skopiować do schowka, ale nie mogę modyfikować ani wkleić.

android:enable="true"
android:textIsSelectable="true"
android:inputType="none"
 1
Author: Leo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-03 21:07:09

Napotkałem ten sam problem, ale po obserwacji odkryłem, że android:editable="false" działa tylko wtedy, gdy inputtype (android:inputType="ANY_VALUE") jest , a nie podane w Edittext.

Usuń inputType z EditText i użyj editable = false, działa dobrze.

 1
Author: shubomb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-16 09:26:50

Try

.setInputType(InputType.TYPE_NULL);
 -1
Author: benmakp benmakn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-26 08:53:36

Spróbuj tego kodu. To działa w moim projekcie, więc będzie działać w Twoim projekcie.

android:editable="false"
 -10
Author: user2309848,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-04 16:54:35