Android EditText view Floating Hint in Material Design


97

L'API 21 fornisce un metodo per utilizzare la seguente funzionalità:

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

Sto cercando di far fluttuare i suggerimenti EditText.

Grazie!



Mi sono imbattuto anche in questo durante la mia ricerca, ma mi chiedevo se Android fornisse un metodo nativo.
xsorifc28

1
Questo ci fa pensare che qualcosa non va con Android. Ci sono diverse lacune mancanti nell'API per Material Design. Un altro esempio è Float Action Button.
motobói

Risposte:


4

È necessario aggiungere quanto segue al file build.gradle del modulo:

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

E usa com.google.android.material.textfield.TextInputLayout nel tuo 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

Suggerimento mobile EditText:

Aggiungi sotto la dipendenza in gradle:

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

Nel layout:

<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
Attenzione: TextInputLayout non mostra il suggerimento EditText prima che l'utente si concentri su di esso.Il bug esiste nella libreria di supporto alla progettazione22.2.0
Ivan Chau

1
Qual è la differenza tra l'utilizzo di EditText e TextInputEditText in questo XML?
sviluppatore Android

2
La dipendenza appena rinominata sembra essere implementation 'com.google.android.material:material:1.0.0-rc01'.
rmtheis

60

Sì, dal 29 maggio 2015 questa funzionalità è ora disponibile nella libreria di supporto per la progettazione Android

Questa libreria include il supporto per

  • Etichette fluttuanti
  • Pulsante di azione fluttuante
  • Snack bar
  • Cassetto di navigazione
  • e altro ancora

3
Sei a conoscenza di un tutorial per etichette mobili con EditTexts come OP menzionato?
AdamMc331


1
Wow grazie! Li esaminerò e ti farò sapere come va!
AdamMc331

2
Il terzo era quello che stavo cercando. Mi sono imbattuto in TextInputLayout, ma non sono riuscito a trovare un buon esempio (probabilmente cercando tutti i termini sbagliati). Grazie!
AdamMc331

18

La libreria di supporto Android può essere importata all'interno di gradle nelle dipendenze:

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

Dovrebbe essere incluso in GradlePlease! E come esempio per usarlo:

 <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>

A proposito, l'editor potrebbe non capire che AutoCompleteTextView è consentito all'interno di TextInputLayout.


11

Android non ha fornito un metodo nativo. Né l'AppCompat.

Prova questa libreria: https://github.com/rengwuxian/MaterialEditText

Questo potrebbe essere quello che vuoi.


1
Ottengo l'errore: (1) "L'attributo" color "è già stato definito" durante la sincronizzazione gradle, probabilmente a causa di appcompat-v7. Non riesco a liberarmene. Qualche suggerimento?
mdzeko

MaterialEditText non ha definito un attributo denominato "color", quindi deve esserci qualcosa di sbagliato altrove.
rengwuxian

9

Importa le librerie di supporto, nel file build.gradle del tuo progetto, aggiungi le seguenti righe nelle dipendenze del progetto:

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

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

Usa il seguente TextInputLayout nel layout dell'interfaccia utente:

<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>

Quindi, chiama setHint su TextInputLayout subito dopo la chiamata setContentView perché, per animare l'etichetta mobile, devi solo impostare un suggerimento, usando il metodo setHint.

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

1
Utilizzando almeno 23.1.1, non è necessario utilizzare una chiamata esplicita a setHint(). Funziona con il suggerimento impostato EditTextnel layout xml.
Ionoclast Brigham

3

Il suggerimento di @andruboy su https://gist.github.com/chrisbanes/11247418 è probabilmente la soluzione migliore.

https://github.com/thebnich/FloatingHintEditText funziona con appcompat-v7 v21.0.0, ma poiché la v21.0.0 non supporta i colori accentati con sottoclassi di EditText, la sottolineatura di FloatingHintEditTextsarà il nero o il bianco solido predefinito. Inoltre, l'imbottitura non è ottimizzata per lo stile Material EditText, quindi potrebbe essere necessario regolarla.


Grazie. Immagino che anche Google non abbia fornito un'API per la creazione di avvisi di modifica del testo in stile materiale, come in google.com/design/spec/components/… Scusa per le domande amatoriali, sto cercando di adattarmi altrettanto al design dei materiali come posso usando le api / librerie di Google e cercando di capire tutto ciò che è stato fornito rispetto a qualsiasi libreria esterna. Grazie ancora!
xsorifc28


0

Per un modo più semplice di utilizzare InputTextLayout, ho creato questa libreria che riduce il tuo codice XML a meno della metà e ti offre anche la possibilità di impostare un messaggio di errore e un messaggio di suggerimento e un modo semplice per eseguire il tuo convalide. https://github.com/TeleClinic/SmartEditText

Aggiungi semplicemente

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

Quindi puoi fare qualcosa del genere:

<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

Prova in questo modo

inserisci qui la descrizione dell'immagine

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

per più riferimento clicca qui


0

Utilizzare il TextInputLayoutfornito dalla libreria dei componenti dei materiali :

    <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>

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.