Widok edycji tekstu w Androidzie Pływająca wskazówka w Material Design


96

Czy API 21 zapewnia metodę korzystania z następującej funkcji:

http://www.google.com/design/spec/components/text-fields.html#text-fields-floating-labels

Próbuję unosić wskazówki EditText.

Dzięki!



Natknąłem się na to również podczas wyszukiwania, ale zastanawiałem się, czy Android zapewnia natywną metodę.
xsorifc28

1
To sprawia, że ​​myślimy, że coś jest nie tak z Androidem. Istnieje kilka brakujących luk w API for Material Design. Innym przykładem jest Float Action Button.
motobói

Odpowiedzi:


4

Musisz dodać następujące elementy do pliku build.gradle modułu:

implementation 'com.google.android.material:material:1.0.0'

I użyj com.google.android.material.textfield.TextInputLayout w swoim kodzie XML:

       <com.google.android.material.textfield.TextInputLayout
            android:id="@+id/text_input_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/my_hint">

        <EditText
            android:id="@+id/editText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="UserName"/>
   </com.google.android.material.textfield.TextInputLayout>

108

Pływająca wskazówka EditText:

Dodaj poniżej zależność w gradle:

compile 'com.android.support:design:22.2.0'

W układzie:

<android.support.design.widget.TextInputLayout
    android:id="@+id/text_input_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

        <EditText
            android:id="@+id/editText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="UserName"/>
    </android.support.design.widget.TextInputLayout>

3
Uważaj na: TextInputLayout nie wyświetla podpowiedzi EditText, zanim użytkownik skupi się na tym błąd istnieje w bibliotece wsparcia projektowania22.2.0
Ivan Chau

1
Jaka jest różnica między używaniem EditText i TextInputEditText w tym kodzie XML?
programista Androida

2
Wygląda na to, że zależność, której nazwa została zmieniona implementation 'com.google.android.material:material:1.0.0-rc01'.
rmtheis

60

Tak, od 29 maja 2015 r. Ta funkcja jest teraz dostępna w bibliotece Android Design Support Library

Ta biblioteka obejmuje obsługę

  • Pływające etykiety
  • Pływający przycisk akcji
  • Batonik
  • Szuflada nawigacji
  • i więcej

3
Czy znasz samouczek dotyczący pływających etykiet z EditTextami, takimi jak wspomniany OP?
AdamMc331


1
Wow, dzięki! Przejrzę je i dam znać, jak to idzie!
AdamMc331

2
Trzeci był tym, czego szukałem. Natknąłem się na TextInputLayout, ale nie mogłem znaleźć dobrego przykładu (prawdopodobnie wyszukując wszystkie niewłaściwe terminy). Dzięki!
AdamMc331

18

Bibliotekę obsługi Androida można zaimportować w gradle w zależnościach:

    compile 'com.android.support:design:22.2.0'

Powinien być zawarty w GradlePlease! I jako przykład, aby go użyć:

 <android.support.design.widget.TextInputLayout
    android:id="@+id/to_text_input_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <AutoCompleteTextView
        android:id="@+id/autoCompleteTextViewTo"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="To"
        android:layout_marginTop="45dp"
        />
</android.support.design.widget.TextInputLayout>

Przy okazji, edytor może nie rozumieć, że AutoCompleteTextView jest dozwolone w TextInputLayout.


11

Android nie zapewnia metody natywnej. Ani AppCompat.

Wypróbuj tę bibliotekę: https://github.com/rengwuxian/MaterialEditText

To może być to, czego chcesz.


1
Pojawia się błąd: (1) „Atrybut” kolor ”został już zdefiniowany„ na synchronizacji gradle, prawdopodobnie z powodu appcompat-v7. Nie mogę się tego pozbyć. Jakieś sugestie?
mdzeko

MaterialEditText nie zdefiniował atrybutu o nazwie „color”, więc gdzie indziej musi być źle.
rengwuxian

9

Zaimportuj biblioteki pomocy technicznej, w pliku build.gradle projektu dodaj następujące wiersze w zależnościach projektu:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])

    compile 'com.android.support:design:22.2.0'
    compile 'com.android.support:appcompat-v7:22.2.0'
}

Użyj następującego TextInputLayout w układzie interfejsu użytkownika:

<android.support.design.widget.TextInputLayout
    android:id="@+id/usernameWrapper"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <EditText
        android:id="@+id/username"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textEmailAddress"
        android:hint="Username"/>

</android.support.design.widget.TextInputLayout>

Następnie wywołaj setHint na TextInputLayout zaraz po wywołaniu setContentView, ponieważ aby animować pływającą etykietę, wystarczy ustawić wskazówkę, używając metody setHint.

final TextInputLayout usernameWrapper = (TextInputLayout) findViewById(R.id.usernameWrapper);
usernameWrapper.setHint("Username");

1
Używając przynajmniej 23.1.1, nie musisz używać jawnego wywołania setHint(). Działa z podpowiedzią ustawioną EditTextw formacie XML układu.
Ionoclast Brigham

3

Sugestia @ andruboy dotycząca https://gist.github.com/chrisbanes/11247418 jest prawdopodobnie najlepszym rozwiązaniem.

https://github.com/thebnich/FloatingHintEditText działa z appcompat-v7 v21.0.0, ale ponieważ wersja 21.0.0 nie obsługuje kolorów akcentujących z podklasami EditText, podkreślenie FloatingHintEditTextbędzie domyślną jednolitą czernią lub bielą. Również wyściółka nie jest zoptymalizowana pod kątem stylu Materiał EditText, więc może być konieczne jej dostosowanie.


Dziękuję Ci. Zgaduję, że Google również nie zapewniło interfejsu API do tworzenia ostrzeżeń o edycji tekstu w stylu materiału, na przykład google.com/design/spec/components/… Przepraszam za pytania amatorów, staram się dostosować do projektowania materiałów tak samo jak mogę, używając API / bibliotek Google i próbując dowiedzieć się wszystkiego, co zostało dostarczone w porównaniu z bibliotekami zewnętrznymi. Dzięki jeszcze raz!
xsorifc28


0

Aby ułatwić korzystanie z InputTextLayout, stworzyłem tę bibliotekę, która skraca twój kod XML do mniej niż połowy, a także zapewnia możliwość ustawienia komunikatu o błędzie, a także komunikatu ze wskazówką i łatwego sposobu walidacje. https://github.com/TeleClinic/SmartEditText

Po prostu dodaj

compile 'com.github.TeleClinic:SmartEditText:0.1.0'

Następnie możesz zrobić coś takiego:

<com.teleclinic.kabdo.smartmaterialedittext.CustomViews.SmartEditText
    android:id="@+id/emailSmartEditText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:setLabel="Email"
    app:setMandatoryErrorMsg="Mandatory field"
    app:setRegexErrorMsg="Wrong email format"
    app:setRegexType="EMAIL_VALIDATION" />

<com.teleclinic.kabdo.smartmaterialedittext.CustomViews.SmartEditText
    android:id="@+id/passwordSmartEditText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:setLabel="Password"
    app:setMandatoryErrorMsg="Mandatory field"
    app:setPasswordField="true"
    app:setRegexErrorMsg="Weak password"
    app:setRegexType="MEDIUM_PASSWORD_VALIDATION" />

<com.teleclinic.kabdo.smartmaterialedittext.CustomViews.SmartEditText
    android:id="@+id/ageSmartEditText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:setLabel="Age"
    app:setMandatory="false"
    app:setRegexErrorMsg="Is that really your age :D?"
    app:setRegexString=".*\\d.*" />

0

Spróbuj w ten sposób

wprowadź opis obrazu tutaj

  dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.0.1'
    compile 'com.android.support:design:23.0.1'
  }

aby uzyskać więcej informacji, kliknij tutaj


0

Skorzystaj z TextInputLayoutudostępnionych przez Bibliotekę komponentów materiałów :

    <com.google.android.material.textfield.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Label">

        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </com.google.android.material.textfield.TextInputLayout>

wprowadź opis obrazu tutaj

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.