Szukaj…


Praca z EditTexts

EditText to standardowy widget do wprowadzania tekstu w aplikacjach na Androida. Jeśli użytkownik musi wprowadzić tekst do aplikacji, jest to główny sposób, aby to zrobić.

Edytować tekst

Istnieje wiele ważnych właściwości, które można ustawić w celu dostosowania zachowania EditText. Kilka z nich wymieniono poniżej. Sprawdź oficjalny przewodnik po polach tekstowych, aby uzyskać jeszcze więcej informacji na temat pól wejściowych.

Stosowanie

Tekst edycji jest dodawany do układu ze wszystkimi domyślnymi zachowaniami przy użyciu następującego kodu XML:

<EditText
    android:id="@+id/et_simple"
    android:layout_height="wrap_content"
    android:layout_width="match_parent">
</EditText>

Zauważ, że EditText jest po prostu cienkim rozszerzeniem TextView i dziedziczy wszystkie te same właściwości.

Odzyskiwanie wartości

Uzyskanie wartości tekstu wprowadzonego do EditText wygląda następująco:

EditText simpleEditText = (EditText) findViewById(R.id.et_simple);
String strValue = simpleEditText.getText().toString();

Dalsze dostosowywanie wejścia

Możemy ograniczyć wpis do jednego wiersza tekstu (unikaj nowych linii):

<EditText
  android:singleLine="true"
  android:lines="1"
/>

Możesz ograniczyć liczbę znaków, które można wprowadzić w polu, używając atrybutu cyfry:

<EditText
  android:inputType="number"
  android:digits="01"
/>

Ograniczyłoby to wprowadzane cyfry do „0” i „1”. Możemy chcieć ograniczyć całkowitą liczbę znaków za pomocą:

<EditText
  android:maxLength="5"
/>

Za pomocą tych właściwości możemy zdefiniować oczekiwane zachowanie wejściowe dla pól tekstowych.

Dostosowywanie kolorów

Możesz dostosować kolor podświetlenia zaznaczonego tekstu w android:textColorHighlight właściwości android:textColorHighlight :

<EditText
    android:textColorHighlight="#7cff88"
/>

Wyświetlanie wskazówek symboli zastępczych

Możesz ustawić podpowiedź do kontrolki EditText, aby monitować użytkownika o określone dane wejściowe za pomocą:

<EditText
    ...
    android:hint="@string/my_hint">
</EditText>

Poradnik

Zmiana koloru dolnej linii

Zakładając, że korzystasz z biblioteki AppCompat, możesz przesłonić style colorControlNormal, colorControlActivated i colorControlHighlight:

<style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorControlNormal">#d32f2f</item>
    <item name="colorControlActivated">#ff5722</item>
    <item name="colorControlHighlight">#f44336</item>
</style>

Jeśli nie widzisz tych stylów zastosowanych w DialogFragment, istnieje znany błąd podczas korzystania z LayoutInflater przekazanego do metody onCreateView ().

Problem został już rozwiązany w bibliotece AppCompat v23. Zobacz ten przewodnik na temat aktualizacji. Innym tymczasowym obejściem jest użycie inflatora układu działania zamiast tego przekazanego do metody onCreateView ():

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_fragment, container);
  }

Odsłuchiwanie wprowadzania EditText

Zapoznaj się z notatkami dla podstawowych słuchaczy zdarzeń, aby dowiedzieć się, jak nasłuchiwać zmian w EditText i wykonywać działania, gdy te zmiany się pojawią.

Wyświetlanie pływającej informacji zwrotnej na etykiecie

Tradycyjnie, EditText ukrywa komunikat podpowiedzi (wyjaśniony powyżej) po tym, jak użytkownik zacznie pisać. Ponadto wszelkie komunikaty o błędach sprawdzania poprawności musiały być zarządzane ręcznie przez programistę.

TextInputLayout umożliwia ustawienie pływającej etykiety w celu wyświetlania podpowiedzi i komunikatów o błędach. Możesz znaleźć więcej szczegółów tutaj .

Dostosowywanie InputType

Pola tekstowe mogą mieć różne typy wprowadzania, takie jak numer, data, hasło lub adres e-mail. Typ określa, jakie znaki są dozwolone w polu, i może skłonić wirtualną klawiaturę do optymalizacji układu pod kątem często używanych znaków.

Domyślnie wszelka zawartość tekstowa w EditText jest wyświetlana jako zwykły tekst. inputType atrybut inputType , możemy ułatwić wprowadzanie różnych rodzajów informacji, takich jak numery telefonów i hasła:

<EditText
    ...
    android:inputType="phone">
</EditText>

Najpopularniejsze typy wprowadzania obejmują:

Rodzaj Opis
textUri Tekst, który będzie używany jako identyfikator URI
textEmailAddress Tekst, który będzie używany jako adres e-mail
textPersonName Tekst, który jest imieniem osoby
textPassword Tekst będący hasłem, które powinno być zasłonięte
numer Pole tylko numeryczne
telefon Do wprowadzenia numeru telefonu
data Za wprowadzenie daty
czas Do wprowadzenia czasu
textMultiLine Zezwalaj na wiele wierszy tekstu w polu

android:inputType pozwala również określić określone zachowania klawiatury, takie jak na przykład android:inputType wielkimi literami wszystkich nowych słów lub korzystanie z funkcji takich jak automatyczne uzupełnianie i sugestie pisowni.
Oto niektóre z typowych wartości typów wejściowych, które definiują zachowanie klawiatury:

Rodzaj Opis
textCapSentences Normalna klawiatura tekstowa, w której każda nowa litera jest pisana wielką literą
textCapWords Normalna klawiatura tekstowa, która zawiera wielkie litery każdego słowa. Dobre dla tytułów lub nazwisk osób
textAutoCorrect Normalna klawiatura tekstowa, która poprawia często błędnie napisane słowa

W razie potrzeby można ustawić wiele atrybutów inputType (oddzielonych inputType „|”).
Przykład:

<EditText
    android:id="@+id/postal_address"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/postal_address_hint"
    android:inputType="textPostalAddress|
                       textCapWords|
                       textNoSuggestions" />

Możesz zobaczyć listę wszystkich dostępnych typów wejść tutaj .

Atrybut `inputype`

inputype atrybut EditText widżet (testowane na Androidzie 4.4.3 i 2.3.3)

<EditText android:id="@+id/et_test" android:inputType="?????"/>

textLongMessage = Klawiatura: alfabet / domyślna. Przycisk Enter: Wyślij / Dalej. Emocja: tak. Obudowa: małe litery. Sugestia: tak. Dodaj. zwęgla: i. i wszystko

textFilter = Klawiatura: alfabet / domyślna. Przycisk Enter: Wyślij / Dalej. Emocja: tak. Obudowa: małe litery. Sugestia: nie Dodaj. zwęgla: i. i wszystko

textCapWords = Klawiatura: alfabet / domyślna. Przycisk Enter: Wyślij / Dalej. Emocja: tak. Case: Camel Case . Sugestia: tak. Dodaj. zwęgla: i. i wszystko

textCapSentences = Klawiatura: alfabet / domyślna. Przycisk Enter: Wyślij / Dalej. Emocja: tak. Case: Case sentent . Sugestia: tak. Dodaj. zwęgla: i. i wszystko

czas = klawiatura: numeryczna. Przycisk Enter: Wyślij / Dalej. Emocja: nie. Walizka: -. Sugestia: nie Dodaj. znaki::

textMultiLine = Klawiatura: alfabet / domyślna. Przycisk Enter: następny wiersz . Emocja: tak. Obudowa: małe litery. Sugestia: tak. Dodaj. zwęgla: i. i wszystko

liczba = klawiatura: numeryczna . Przycisk Enter: Wyślij / Dalej. Emocja: nie. Walizka: -. Sugestia: nie Dodaj. znaki: nic

textEmailAddress = Klawiatura: alfabet / domyślna. Przycisk Enter: Wyślij / Dalej. Emocja: nie . Obudowa: małe litery. Sugestia: nie Dodaj. znaki: @ i . i wszystko

(Bez typu) = Klawiatura: alfabet / wartość domyślna. Przycisk Enter: następny wiersz . Emocja: tak. Obudowa: małe litery. Sugestia: tak. Dodaj. zwęgla: i. i wszystko

textPassword = Klawiatura: alfabet / domyślna. Przycisk Enter: Wyślij / Dalej. Emocja: nie. Obudowa: małe litery. Sugestia: nie Dodaj. zwęgla: i. i wszystko

tekst = Klawiatura: Klawiatura: alfabet / domyślna. Przycisk Enter: Wyślij / Dalej. Emocja: tak. Obudowa: małe litery. Sugestia: tak. Dodaj. zwęgla: i. i wszystko

textShortMessage = Klawiatura: alfabet / domyślna. Przycisk Enter: emocja . Emocja: tak. Obudowa: małe litery. Sugestia: tak. Dodaj. zwęgla: i. i wszystko

textUri = Klawiatura: alfabet / domyślna. Przycisk Enter: Wyślij / Dalej. Emocja: nie. Obudowa: małe litery. Sugestia: nie Dodaj. znaki: / i . i wszystko

textCapCharacters = Klawiatura: alfabet / domyślna. Przycisk Enter: Wyślij / Dalej. Emocja: tak. Obudowa: DUŻA . Sugestia: tak. Dodaj. zwęgla: i. i wszystko

telefon = klawiatura: numeryczna . Przycisk Enter: Wyślij / Dalej. Emocja: nie. Walizka: -. Sugestia: nie Dodaj. znaki: *** #. - / () WPN, + **

textPersonName = Klawiatura: alfabet / domyślna. Przycisk Enter: Wyślij / Dalej. Emocja: tak. Obudowa: małe litery. Sugestia: tak. Dodaj. zwęgla: i. i wszystko


Uwaga: Auto-capitalization włączania Auto-capitalization zmieni domyślne zachowanie.

Uwaga 2: Na Numeric keyboard WSZYSTKIE numery to angielski 1234567890.

Uwaga 3: Ustawienie Correction/Suggestion zmieni domyślne zachowanie.

Ukrywanie SoftKeyboard

Ukrywanie Softkeyboard jest podstawowym wymogiem, zwykle podczas pracy z EditText. Klawiaturę programową domyślnie można zamknąć tylko przez naciśnięcie przycisku Wstecz, więc większość programistów używa InputMethodManager, aby zmusić Androida do ukrycia wirtualnej klawiatury wywołującej hideSoftInputFromWindow i przekazując token okna zawierającego skoncentrowany widok. Kod do wykonania następujących czynności:

public void hideSoftKeyboard()    
{
        InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);    
}

Kod jest bezpośredni, ale innym poważnym problemem, który się pojawia, jest konieczność wywołania funkcji ukrywania w przypadku wystąpienia jakiegoś zdarzenia. Co zrobić, gdy potrzebujesz ukryć klawiaturę programową po naciśnięciu dowolnego miejsca poza tekstem edycji? Poniższy kod podaje schludną funkcję, którą należy wywołać w metodzie onCreate () tylko raz.

public void setupUI(View view) 
{
        String s = "inside";
        //Set up touch listener for non-text box views to hide keyboard.
        if (!(view instanceof EditText)) {

            view.setOnTouchListener(new View.OnTouchListener() {

                public boolean onTouch(View v, MotionEvent event) {
                    hideSoftKeyboard();
                    return false;
                }

            });
        }

        //If a layout container, iterate over children and seed recursion.
        if (view instanceof ViewGroup) {

            for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {

                View innerView = ((ViewGroup) view).getChildAt(i);

                setupUI(innerView);
            }
        }    
}

Ikona lub przycisk wewnątrz niestandardowej edycji tekstu oraz jego akcji i detektorów kliknięć.

Ten przykład pomoże Ci edytować tekst z ikoną po prawej stronie.

Uwaga: W tym właśnie używam setCompoundDrawablesWithIntrinsicBounds, więc jeśli chcesz zmienić pozycję ikony, możesz to osiągnąć za pomocą setCompoundDrawablesWithIntrinsicBounds w setIcon.

public class MKEditText extends AppCompatEditText {

    public interface IconClickListener {
        public void onClick();
    }

    private IconClickListener mIconClickListener;

    private static final String TAG = MKEditText.class.getSimpleName();

    private final int EXTRA_TOUCH_AREA = 50;
    private Drawable mDrawable;
    private boolean touchDown;

    public MKEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public MKEditText(Context context) {
        super(context);
    }

    public MKEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public void showRightIcon() {
        mDrawable = ContextCompat.getDrawable(getContext(), R.drawable.ic_android_black_24dp);

        setIcon();
    }

    public void setIconClickListener(IconClickListener iconClickListener) {
        mIconClickListener = iconClickListener;
    }

    private void setIcon() {
        Drawable[] drawables = getCompoundDrawables();

        setCompoundDrawablesWithIntrinsicBounds(drawables[0], drawables[1], mDrawable, drawables[3]);

        setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
        setSelection(getText().length());
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        final int right = getRight();
        final int drawableSize = getCompoundPaddingRight();
        final int x = (int) event.getX();
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                if (x + EXTRA_TOUCH_AREA >= right - drawableSize && x <= right + EXTRA_TOUCH_AREA) {
                    touchDown = true;
                    return true;
                }
                break;
            case MotionEvent.ACTION_UP:
                if (x + EXTRA_TOUCH_AREA >= right - drawableSize && x <= right + EXTRA_TOUCH_AREA && touchDown) {
                    touchDown = false;
                    if (mIconClickListener != null) {
                        mIconClickListener.onClick();
                    }
                    return true;
                }
                touchDown = false;
                break;

        }
        return super.onTouchEvent(event);
    }
}

Jeśli chcesz zmienić obszar dotykowy, możesz zmienić domyślne wartości EXTRA_TOUCH_AREA, które podałem jako 50.

Aby włączyć przycisk nasłuchiwania przycisku i kliknięcia, do którego możesz zadzwonić z działania lub fragmentu w ten sposób,

MKEditText mkEditText = (MKEditText) findViewById(R.id.password);
mkEditText.showRightIcon();
mkEditText.setIconClickListener(new MKEditText.IconClickListener() {
            @Override
            public void onClick() {
              // You can do action here for the icon.
               
            }
        });


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow