Android EditText-Ansicht Floating Hint in Material Design

96

Bietet API 21 eine Methode zur Verwendung der folgenden Funktion:

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

Ich versuche, die EditText-Hinweise zu schweben.

Vielen Dank!

xsorifc28
quelle
Ich bin auch während meiner Suche darauf gestoßen, habe mich aber gefragt, ob Android eine native Methode bietet.
Xsorifc28
1
Dies lässt uns denken, dass etwas mit Android nicht stimmt. In der API für Materialdesign fehlen mehrere Lücken. Ein weiteres Beispiel ist der Float Action Button.
Motobói

Antworten:

3

Sie müssen Ihrer Datei build.gradle Folgendes hinzufügen:

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

Und verwenden Sie com.google.android.material.textfield.TextInputLayout in Ihrem 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
quelle
108

Gleitender Hinweis EditText:

Fügen Sie die folgende Abhängigkeit in Gradle hinzu:

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

Im 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>
Arpit
quelle
3
Achtung: TextInputLayout zeigt keinen EditText-Hinweis an, bevor der Benutzer sich darauf konzentriert. Fehler in der Design-Support-Bibliothek vorhanden22.2.0
Ivan Chau
1
Was ist der Unterschied zwischen der Verwendung von EditText und TextInputEditText in diesem XML?
Android-Entwickler
2
Die neu umbenannte Abhängigkeit scheint zu sein implementation 'com.google.android.material:material:1.0.0-rc01'.
rmtheis
60

Ja, seit dem 29. Mai 2015 ist diese Funktionalität in der Android Design Support Library verfügbar

Diese Bibliothek enthält Unterstützung für

  • Schwimmende Etiketten
  • Schwebende Aktionstaste
  • Imbissbude
  • Navigationsschublade
  • und mehr
Dave Jensen
quelle
3
Kennen Sie zufällig ein Tutorial für schwebende Labels mit EditTexts wie OP?
AdamMc331
1
Wow, danke! Ich werde diese durchsehen und Sie wissen lassen, wie es geht!
AdamMc331
2
Der dritte war das, wonach ich gesucht habe. Ich bin auf TextInputLayout gestoßen, konnte aber kein gutes Beispiel finden (wahrscheinlich alle falschen Begriffe suchen). Vielen Dank!
AdamMc331
18

Die Android-Unterstützungsbibliothek kann in gradle in den Abhängigkeiten importiert werden:

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

Es sollte in GradlePlease enthalten sein! Und als Beispiel, um es zu verwenden:

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

Übrigens versteht der Editor möglicherweise nicht, dass AutoCompleteTextView in TextInputLayout zulässig ist.

Aselims
quelle
11

Android hat keine native Methode bereitgestellt. Noch der AppCompat.

Probieren Sie diese Bibliothek aus: https://github.com/rengwuxian/MaterialEditText

Dies könnte sein, was Sie wollen.

Rengwuxian
quelle
1
Ich erhalte den Fehler: (1) "Attribut" Farbe "wurde bereits definiert" bei der Gradle-Synchronisierung, wahrscheinlich aufgrund der Appcompat-v7. Ich kann es nicht loswerden. Anny Vorschläge?
Mdzeko
MaterialEditText hat kein Attribut mit dem Namen "Farbe" definiert, daher muss an anderer Stelle etwas falsch sein.
Rengwuxian
9

Importieren Sie die Unterstützungsbibliotheken. Fügen Sie in der build.gradle-Datei Ihres Projekts die folgenden Zeilen in die Abhängigkeiten des Projekts ein:

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

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

Verwenden Sie das folgende TextInputLayout in Ihrem UI-Layout:

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

Rufen Sie dann setHint in TextInputLayout direkt nach dem Aufruf von setContentView auf, da Sie zum Animieren der schwebenden Beschriftung nur einen Hinweis mit der Methode setHint festlegen müssen.

final TextInputLayout usernameWrapper = (TextInputLayout) findViewById(R.id.usernameWrapper);
usernameWrapper.setHint("Username");
Shridutt Kothari
quelle
1
Zumindest mit 23.1.1 müssen Sie keinen expliziten Aufruf von verwenden setHint(). Es funktioniert mit dem Hinweis, der EditTextin der Layout-XML festgelegt ist.
Ionoclast Brigham
3

@ andruboys Vorschlag von https://gist.github.com/chrisbanes/11247418 ist wahrscheinlich die beste Wahl .

https://github.com/thebnich/FloatingHintEditText funktioniert mit appcompat-v7 v21.0.0. Da v21.0.0 jedoch keine Akzentfarben mit Unterklassen von unterstützt EditText, ist die Unterstreichung von FloatingHintEditTextstandardmäßig das feste Schwarz oder Weiß. Außerdem ist die Polsterung nicht für den Materialstil optimiert EditText, sodass Sie sie möglicherweise anpassen müssen.

TalkLittle
quelle
Danke dir. Ich vermute, Google hat auch keine API zum Erstellen einer Warnung zum Bearbeiten von Text im Materialstil bereitgestellt, wie in google.com/design/spec/components/…. Entschuldigen Sie die Amateurfragen, ich versuche, mich so gut an das Materialdesign anzupassen Ich kann die API / Bibliotheken von Google verwenden und versuchen, alles herauszufinden, was bereitgestellt wurde, im Vergleich zu externen Bibliotheken. Danke noch einmal!
Xsorifc28
0

Um die Verwendung des InputTextLayout zu vereinfachen, habe ich diese Bibliothek erstellt, die Ihren XML-Code auf weniger als die Hälfte reduziert und Ihnen die Möglichkeit bietet, eine Fehlermeldung sowie eine Hinweisnachricht festzulegen, und eine einfache Möglichkeit, dies zu tun Validierungen. https://github.com/TeleClinic/SmartEditText

Einfach hinzufügen

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

Dann können Sie so etwas tun:

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

Versuchen Sie es auf diese Weise

Geben Sie hier die Bildbeschreibung ein

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

Für weitere Informationen klicken Sie hier

Dhina k
quelle