มุมมอง Android EditText คำแนะนำแบบลอยในดีไซน์ Material


99

API 21 มีวิธีการใช้คุณลักษณะต่อไปนี้หรือไม่:

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

ฉันพยายามลอยคำใบ้ EditText

ขอบคุณ!



ฉันเจอสิ่งนี้เช่นกันในระหว่างการค้นหา แต่ก็สงสัยว่า Android มีวิธีดั้งเดิมหรือไม่
xsorifc28

1
สิ่งนี้ทำให้เราคิดว่ามีบางอย่างผิดปกติกับ Android มีช่องว่างที่ขาดหายไปหลายอย่างใน API สำหรับดีไซน์ Material อีกตัวอย่างหนึ่งคือปุ่ม Float Action
motobói

คำตอบ:


5

คุณต้องเพิ่มสิ่งต่อไปนี้ในไฟล์ build.gradle ของโมดูลของคุณ:

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

และใช้ com.google.android.material.textfield.TextInputLayout ใน 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>

109

คำใบ้แก้ไขข้อความ:

เพิ่มการพึ่งพาด้านล่างใน gradle:

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

ในเค้าโครง:

<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
ระวัง: TextInputLayout ไม่แสดงคำใบ้ EditText ก่อนที่ผู้ใช้จะโฟกัสไปที่จุดบกพร่องนั้นมีอยู่ในไลบรารีสนับสนุนการออกแบบ22.2.0
Ivan Chau

1
อะไรคือความแตกต่างระหว่างการใช้ EditText และ TextInputEditText ใน XML นี้
นักพัฒนา Android

2
implementation 'com.google.android.material:material:1.0.0-rc01'พึ่งพาเปลี่ยนชื่อใหม่น่าจะเป็น
rmtheis

60

ใช่ ณ วันที่ 29 พฤษภาคม 2015 ฟังก์ชันนี้มีให้ในAndroid Design Support Library แล้ว

ไลบรารีนี้มีการสนับสนุนสำหรับ

  • ป้ายลอย
  • ปุ่มดำเนินการลอย
  • สแน็คบาร์
  • ลิ้นชักการนำทาง
  • และอื่น ๆ

3
คุณรู้จักบทช่วยสอนสำหรับป้ายกำกับแบบลอยที่มี EditTexts เช่น OP ที่กล่าวถึงหรือไม่?
AdamMc331


1
ว้าวขอบคุณ! ฉันจะตรวจสอบสิ่งเหล่านี้และแจ้งให้คุณทราบว่ามันเป็นอย่างไร!
AdamMc331

2
อันที่สามคือสิ่งที่ฉันกำลังมองหา ฉันสะดุดกับ TextInputLayout แต่ไม่พบตัวอย่างที่ดี (อาจค้นหาคำผิดทั้งหมด) ขอบคุณ!
AdamMc331

18

สามารถนำเข้าไลบรารีการสนับสนุน Android ภายใน gradle ในการอ้างอิง:

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

ควรรวมอยู่ใน GradlePlease! และเป็นตัวอย่างในการใช้งาน:

 <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 ผู้แก้ไขอาจไม่เข้าใจว่า AutoCompleteTextView ได้รับอนุญาตภายใน TextInputLayout


11

Android ไม่ได้ให้วิธีการดั้งเดิม หรือ AppCompat

ลองใช้ไลบรารีนี้: https://github.com/rengwuxian/MaterialEditText

นี่อาจเป็นสิ่งที่คุณต้องการ


1
ฉันได้รับข้อผิดพลาด: (1) มีการกำหนด "แอตทริบิวต์" สี "ไว้แล้ว" ในการซิงค์ gradle อาจเป็นเพราะ appcompat-v7 ฉันไม่สามารถกำจัดมันได้ ข้อเสนอแนะอะไร?
mdzeko

MaterialEditText ไม่ได้กำหนดแอตทริบิวต์ชื่อ "color" ดังนั้นจึงต้องมีบางอย่างผิดปกติ
rengwuxian

9

นำเข้าไลบรารีสนับสนุนในไฟล์ build.gradle ของโปรเจ็กต์ของคุณให้เพิ่มบรรทัดต่อไปนี้ในการอ้างอิงของโปรเจ็กต์:

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

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

ใช้ TextInputLayout ต่อไปนี้ในเค้าโครง UI ของคุณ:

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

กว่าเรียก setHint บน TextInputLayout หลังจากการเรียก setContentView เนื่องจากในการทำให้ป้ายกำกับลอยเคลื่อนไหวคุณเพียงแค่ต้องตั้งค่าคำใบ้โดยใช้เมธอด setHint

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

1
ใช้ 23.1.1 setHint()อย่างน้อยคุณไม่จำเป็นต้องใช้การโทรที่ชัดเจนในการ ใช้งานได้กับคำใบ้ที่ตั้งไว้EditTextใน xml ในเค้าโครง
Ionoclast Brigham

3

ข้อเสนอแนะของ @ andruboy เกี่ยวกับhttps://gist.github.com/chrisbanes/11247418น่าจะเป็นทางออกที่ดีที่สุดของคุณ

https://github.com/thebnich/FloatingHintEditText ใช้งานได้กับ appcompat-v7 v21.0.0 แต่เนื่องจาก v21.0.0 ไม่รองรับสีที่เน้นเสียงกับคลาสย่อยของEditTextการขีดเส้นใต้FloatingHintEditTextจะเป็นสีดำหรือสีขาวเริ่มต้น นอกจากนี้ช่องว่างภายในยังไม่ได้รับการปรับให้เหมาะกับรูปแบบวัสดุEditTextดังนั้นคุณอาจต้องปรับเปลี่ยน


ขอบคุณ. ฉันเดาว่า Google ยังไม่ได้ให้ API สำหรับการสร้างคำเตือนข้อความแก้ไขสไตล์วัสดุเช่นในgoogle.com/design/spec/components/… ขออภัยสำหรับคำถามมือสมัครเล่นฉันกำลังพยายามปรับให้เข้ากับการออกแบบวัสดุมากที่สุด เนื่องจากฉันสามารถใช้ api / libraries ของ Google และพยายามหาทุกอย่างที่มีให้เทียบกับไลบรารีภายนอกใด ๆ ขอบคุณอีกครั้ง!
xsorifc28


0

สำหรับวิธีที่ง่ายกว่าในการใช้ InputTextLayout ฉันได้สร้างไลบรารีนี้ที่ตัดโค้ด XML ของคุณให้เหลือน้อยกว่าครึ่งหนึ่งและยังช่วยให้คุณสามารถตั้งค่าข้อความแสดงข้อผิดพลาดตลอดจนข้อความคำใบ้และวิธีง่ายๆในการทำ การตรวจสอบ https://github.com/TeleClinic/SmartEditText

เพียงแค่เพิ่ม

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

จากนั้นคุณสามารถทำสิ่งนี้:

<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

ใช้สิ่งที่TextInputLayoutจัดเตรียมโดยไลบรารีส่วนประกอบวัสดุ :

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

ป้อนคำอธิบายภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.