Android EditText view Indice flottant dans Material Design

96

L'API 21 fournit-elle une méthode pour utiliser la fonctionnalité suivante:

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

J'essaye de faire flotter les indices EditText.

Merci!

xsorifc28
la source
J'ai rencontré cela également lors de ma recherche, mais je me demandais si Android fournissait une méthode native.
xsorifc28
1
Cela nous fait penser que quelque chose ne va pas avec Android. Il manque plusieurs lacunes dans l'API pour la conception de matériaux. Un autre exemple est le bouton d'action flottante.
motobói

Réponses:

3

Vous devez ajouter ce qui suit à votre fichier build.gradle de module:

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

Et utilisez com.google.android.material.textfield.TextInputLayout dans votre 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>
Damith Alahakoon
la source
108

Indice flottant EditText:

Ajoutez ci-dessous la dépendance dans gradle:

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

Dans la mise en page:

<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>
arpit
la source
3
Méfiez-vous de: TextInputLayout n'affiche pas l'indication EditText avant que l'utilisateur ne se concentre sur ce bogue existe dans la bibliothèque de support de conception22.2.0
Ivan Chau
1
Quelle est la différence entre l'utilisation de EditText et TextInputEditText dans ce XML?
développeur android
2
La dépendance nouvellement renommée semble être implementation 'com.google.android.material:material:1.0.0-rc01'.
rmtheis
60

Oui, depuis le 29 mai 2015, cette fonctionnalité est désormais fournie dans la bibliothèque de support de conception Android

Cette bibliothèque inclut la prise en charge de

  • Étiquettes flottantes
  • Bouton d'action flottant
  • Snackbar
  • Tiroir de navigation
  • et plus
Dave Jensen
la source
3
Connaissez-vous un tutoriel pour les étiquettes flottantes avec EditTexts comme OP mentionné?
AdamMc331
1
Ouah merci! Je vais les parcourir et vous faire savoir comment cela se passe!
AdamMc331
2
Le troisième était ce que je cherchais. Je suis tombé sur TextInputLayout, mais je n'ai pas trouvé de bon exemple (probablement en recherchant tous les mauvais termes). Merci!
AdamMc331
18

La bibliothèque de support Android peut être importée dans gradle dans les dépendances:

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

Il devrait être inclus dans GradlePlease! Et comme exemple pour l'utiliser:

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

Btw, l'éditeur peut ne pas comprendre que AutoCompleteTextView est autorisé dans TextInputLayout.

aselims
la source
11

Android n'a pas fourni de méthode native. Ni l'AppCompat.

Essayez cette bibliothèque: https://github.com/rengwuxian/MaterialEditText

C'est peut-être ce que vous voulez.

rengwuxian
la source
1
J'obtiens l'erreur: (1) "L'attribut" couleur "a déjà été défini" lors de la synchronisation de gradle, probablement à cause de l'appcompat-v7. Je ne peux pas m'en débarrasser. Suggestions d'Anny?
mdzeko
MaterialEditText n'a pas défini un attribut nommé "couleur", donc il doit y avoir quelque chose qui ne va pas ailleurs.
rengwuxian
9

Importez les bibliothèques de support, dans le fichier build.gradle de votre projet, ajoutez les lignes suivantes dans les dépendances du projet:

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

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

Utilisez TextInputLayout suivant dans votre disposition d'interface utilisateur:

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

Ensuite, appelez setHint sur TextInputLayout juste après l'appel setContentView car, pour animer l'étiquette flottante, il vous suffit de définir un indice à l'aide de la méthode setHint.

final TextInputLayout usernameWrapper = (TextInputLayout) findViewById(R.id.usernameWrapper);
usernameWrapper.setHint("Username");
Shridutt Kothari
la source
1
En utilisant au moins 23.1.1, vous n'avez pas besoin d'utiliser un appel explicite à setHint(). Cela fonctionne avec le conseil défini sur le EditTextdans le format xml.
Ionoclast Brigham
3

La suggestion de @ andruboy de https://gist.github.com/chrisbanes/11247418 est probablement votre meilleur pari.

https://github.com/thebnich/FloatingHintEditText fonctionne avec appcompat-v7 v21.0.0, mais comme la v21.0.0 ne prend pas en charge les couleurs d'accentuation avec les sous-classes de EditText, le soulignement de FloatingHintEditTextsera le noir ou blanc solide par défaut. De plus, le remplissage n'est pas optimisé pour le style Matériau EditText, vous devrez peut-être l'ajuster.

TalkLittle
la source
Je vous remercie. Je suppose que Google n'a pas non plus fourni d'API pour créer un avertissement de modification de texte de style matériau, comme dans google.com/design/spec/components/... Désolé pour les questions d'amateur, j'essaie de m'adapter autant à la conception matérielle car je peux utiliser l'api / bibliothèques de Google et essayer de comprendre tout ce qui a été fourni par rapport à toutes les bibliothèques extérieures. Merci encore!
xsorifc28
0

Pour un moyen plus simple d'utiliser InputTextLayout, j'ai créé cette bibliothèque qui réduit votre code XML à moins de la moitié, et vous offre également la possibilité de définir un message d'erreur ainsi qu'un message d'indication et un moyen simple de faire votre validations. https://github.com/TeleClinic/SmartEditText

Ajoutez simplement

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

Ensuite, vous pouvez faire quelque chose comme ceci:

<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.*" />
Karim
la source
0

Essayez de cette façon

entrez la description de l'image ici

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

pour plus de références cliquez ici

Dhina k
la source
0

Utilisez le TextInputLayoutfourni par la bibliothèque de composants de matériaux :

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

entrez la description de l'image ici

Gabriele Mariotti
la source