Chế độ xem Android EditText Gợi ý nổi trong Material Design


96

API 21 có cung cấp phương pháp sử dụng tính năng sau không:

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

Tôi đang cố làm nổi các gợi ý EditText.

Cảm ơn!



Tôi cũng gặp phải vấn đề này trong quá trình tìm kiếm của mình, nhưng tự hỏi liệu Android có cung cấp phương thức gốc hay không.
xsorifc28

1
Điều này khiến chúng tôi nghĩ rằng có điều gì đó không ổn với Android. Có một số lỗ hổng còn thiếu trên API cho Thiết kế Vật liệu. Một ví dụ khác là Nút hành động nổi.
motobói

Câu trả lời:


3

Bạn cần thêm phần sau vào tệp build.gradle mô-đun của mình:

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

Và sử dụng com.google.android.material.textfield.TextInputLayout trong XML của bạn:

       <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

Gợi ý nổi EditText:

Thêm phụ thuộc bên dưới trong gradle:

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

Trong bố cục:

<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
Hãy coi chừng: TextInputLayout không hiển thị EditText gợi ý trước khi sử dụng tập trung vào nó lỗi tồn tại trong thư viện hỗ trợ thiết kế22.2.0
Ivan Châu

1
Sự khác biệt giữa việc sử dụng EditText và TextInputEditText trong XML này là gì?
nhà phát triển android

2
Phần phụ thuộc mới được đổi tên dường như là implementation 'com.google.android.material:material:1.0.0-rc01'.
rmtheis

60

Có, kể từ ngày 29 tháng 5 năm 2015, chức năng này hiện được cung cấp trong Thư viện hỗ trợ thiết kế Android

Thư viện này bao gồm hỗ trợ cho

  • Nhãn nổi
  • Nút tác vụ nổi
  • Snackbar
  • Ngăn điều hướng
  • và hơn thế nữa

3
Bạn có tình cờ biết một hướng dẫn cho nhãn nổi với EditTexts như OP đã đề cập không?
AdamMc331


1
Ồ cảm ơn nhé! Tôi sẽ xem xét những điều này và cho bạn biết nó diễn ra như thế nào!
AdamMc331

2
Cái thứ ba là những gì tôi đang tìm kiếm. Tôi tình cờ tìm thấy TextInputLayout, nhưng không thể tìm thấy một ví dụ nào tốt (có thể là tìm kiếm tất cả các cụm từ sai). Cảm ơn!
AdamMc331

18

Thư viện hỗ trợ Android có thể được nhập trong gradle trong các phần phụ thuộc:

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

Nó nên được bao gồm trong GradlePlease! Và làm ví dụ để sử dụng nó:

 <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, người chỉnh sửa có thể không hiểu rằng AutoCompleteTextView được phép trong TextInputLayout.


11

Android không cung cấp một phương thức gốc. Cũng không phải AppCompat.

Hãy thử thư viện này: https://github.com/rengwuxian/MaterialEditText

Đây có thể là những gì bạn muốn.


1
Tôi gặp lỗi: (1) Màu "thuộc tính" "đã được xác định" trên đồng bộ hóa gradle, có thể là do appcompat-v7. Tôi không thể thoát khỏi nó. Anny đề nghị?
mdzeko

MaterialEditText chưa xác định thuộc tính có tên "color", vì vậy nó phải có gì đó sai ở chỗ khác.
rengwuxian

9

Nhập các Thư viện Hỗ trợ, Trong tệp build.gradle của dự án, hãy thêm các dòng sau vào phần phụ thuộc của dự án:

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

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

Sử dụng TextInputLayout sau trong Bố cục giao diện người dùng của bạn:

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

Hơn nữa, hãy gọi setHint trên TextInputLayout ngay sau lệnh gọi setContentView bởi vì, để tạo hiệu ứng cho nhãn nổi, bạn chỉ cần đặt một gợi ý, sử dụng phương thức setHint.

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

1
Sử dụng ít nhất 23.1.1, bạn không cần phải sử dụng một lệnh gọi rõ ràng tới setHint(). Nó hoạt động với gợi ý được đặt trên EditTextxml trong bố cục.
Ionoclast Brigham

3

Đề xuất của @ andruboy về https://gist.github.com/chrisbanes/11247418 có lẽ là đặt cược tốt nhất cho bạn.

https://github.com/thebnich/FloatingHintEditText loại hoạt động với appcompat-v7 v21.0.0, nhưng vì v21.0.0 không hỗ trợ màu nhấn với các lớp con của EditText, phần gạch dưới của FloatingHintEditTextsẽ là màu đen hoặc trắng liền khối mặc định. Ngoài ra, phần đệm không được tối ưu hóa cho kiểu Material EditText, vì vậy bạn có thể cần phải điều chỉnh nó.


Cảm ơn bạn. Tôi đoán rằng google cũng chưa cung cấp api để tạo cảnh báo văn bản chỉnh sửa theo kiểu material, như trong google.com/design/spec/components/… Xin lỗi vì những câu hỏi nghiệp dư, tôi đang cố gắng thích ứng với material design nhiều vì tôi có thể sử dụng api / thư viện của google và cố gắng tìm ra mọi thứ đã được cung cấp so với bất kỳ thư viện bên ngoài nào. Cảm ơn một lần nữa!
xsorifc28.


0

Để sử dụng InputTextLayout một cách dễ dàng hơn, tôi đã tạo thư viện này để cắt mã XML của bạn xuống còn một nửa, đồng thời cung cấp cho bạn khả năng đặt thông báo lỗi cũng như thông báo gợi ý và một cách dễ dàng để thực hiện. xác nhận. https://github.com/TeleClinic/SmartEditText

Chỉ cần thêm

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

Sau đó, bạn có thể làm một cái gì đó như sau:

<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

Hãy thử cách này

nhập mô tả hình ảnh ở đây

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

để tham khảo thêm bấm vào đây


0

Sử dụng TextInputLayoutđược cung cấp bởi Thư viện Thành phần Vật liệu :

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

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.