cách thay đổi màu nhãn và văn bản chỉnh sửa của TextinputLayout gạch chân android


120

Tôi đang sử dụng thư viện thiết kế Android TextinputLayout. Nhưng không thể tùy chỉnh màu gợi ý, màu nhãn và màu gạch chân EditTextbên trong TextinputLayout. Xin vui lòng giúp đỡ.


1
Nó phải có màu nhấn theo hướng dẫn thiết kế phải không?
Raghunandan

ya, nhưng tôi sẽ có nhiều EditTexts với màu sắc khác với màu nhấn của chủ đề.
Nitesh Verma,


Vui lòng kiểm tra câu trả lời của tôi tại đây để thay đổi màu nhãn
Jain được triệu tập vào

Tôi có thể thay đổi gạch chân một cách đáng tin cậy ở cả trạng thái có tiêu điểm và không tập trung bằng cách sử dụng nền tùy chỉnh có thể vẽ được chỉ định trong stackoverflow.com/a/36543554/2413303
EpicPandaForce

Câu trả lời:


256

Thay đổi màu dòng dưới cùng:

<item name="colorControlNormal">#c5c5c5</item>
<item name="colorControlActivated">@color/accent</item>
<item name="colorControlHighlight">@color/accent</item>

Để biết thêm thông tin, hãy kiểm tra chủ đề này .

Thay đổi màu gợi ý khi nó nổi

<style name="MyHintStyle" parent="@android:style/TextAppearance">
    <item name="android:textColor">@color/main_color</item>
</style>

và sử dụng nó như thế này:

<android.support.design.widget.TextInputLayout
    ...
    app:hintTextAppearance="@style/MyHintStyle">

Thay đổi màu gợi ý khi nó không phải là nhãn nổi:

<android.support.design.widget.TextInputLayout
    ...
    app:hintTextAppearance="@style/MyHintStyle"
    android:textColorHint="#c1c2c4">

Cảm ơn @AlbAtNf


Tôi không thể thay đổi màu gợi ý (khi nó không có nhãn). Bạn có thể giúp gì không?
Nitesh Verma,

Tôi thực sự lo lắng về kích thước ứng dụng của mình, xem xét điều đó, có bất kỳ ý tưởng nào về kích thước bổ sung dự kiến ​​sẽ đưa vào ứng dụng của tôi không?
Nitesh Verma,

xin lỗi, không nhận được câu hỏi của bạn, vui lòng giải thích thêm, kích thước trong ngữ cảnh nào, kích thước đồ họa của trọng lượng ứng dụng (Như apk trên 20mb hoặc thứ gì đó) và trước đó bạn chấp nhận câu trả lời của tôi và một lần nữa bạn xóa chấp nhận của bạn, tôi có thể hỏi , y vậy?
Pankaj Arora,

becoz, tôi không thể thay đổi màu gợi ý sau câu trả lời của bạn. Một số phần của nó đã hoạt động với tôi nhưng đây không phải là giải pháp hoàn chỉnh cho những gì tôi yêu cầu. Tăng kích thước ứng dụng, không thêm thư viện bên ngoài như Material EdiTText để tăng kích thước ứng dụng?
Nitesh Verma,

4
@NiteshVerma đã tìm thấy giải pháp để đặt Màu gợi ý, khi nó không phải là bảng lảng nổi: chỉ cần đặt android:textColorHintthành TextInputLayouttrong XML.
AlbAtNf

30

Dựa trên Fedor Kazakov câu trả lời của và những người khác, tôi đã tạo một cấu hình mặc định.

styles.xml

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

    <style name="Widget.Design.TextInputLayout" parent="AppTheme">
        <item name="hintTextAppearance">@style/AppTheme.TextFloatLabelAppearance</item>
        <item name="errorTextAppearance">@style/AppTheme.TextErrorAppearance</item>
        <item name="counterTextAppearance">@style/TextAppearance.Design.Counter</item>
        <item name="counterOverflowTextAppearance">@style/TextAppearance.Design.Counter.Overflow</item>
    </style>

    <style name="AppTheme.TextFloatLabelAppearance" parent="TextAppearance.Design.Hint">
        <!-- Floating label appearance here -->
        <item name="android:textColor">@color/colorAccent</item>
        <item name="android:textSize">20sp</item>
    </style>

    <style name="AppTheme.TextErrorAppearance" parent="TextAppearance.Design.Error">
        <!-- Error message appearance here -->
        <item name="android:textColor">#ff0000</item>
        <item name="android:textSize">20sp</item>
    </style>

</resources>

activity_layout.xml

<android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.v7.widget.AppCompatEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Text hint here"
        android:text="5,2" />

</android.support.design.widget.TextInputLayout>

Tập trung:

Tập trung

Không có tiêu điểm:

Không có tiêu điểm

Thông báo lỗi:

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


8
Tôi nên làm gì để cũng nhận được màu hồng cho ví dụ "Không có tiêu điểm"?
John Smith

làm thế nào để sử dụng phong cách này?
Hanzala

23

Với Thư viện Thành phần Vật liệu, bạn có thể sử dụng com.google.android.material.textfield.TextInputLayout.

Bạn có thể áp dụng một kiểu tùy chỉnh để thay đổi màu sắc.

Để thay đổi màu gợi ý, bạn phải sử dụng các thuộc tính sau:
hintTextColorandroid:textColorHint.

<style name="Custom_textinputlayout_filledbox" parent="@style/Widget.MaterialComponents.TextInputLayout.FilledBox">
    <!-- The color of the label when it is collapsed and the text field is active -->
    <item name="hintTextColor">?attr/colorPrimary</item>

    <!-- The color of the label in all other text field states (such as resting and disabled) -->
    <item name="android:textColorHint">@color/selector_hint_text_color</item>
</style>

Bạn nên sử dụng một bộ chọn cho android:textColorHint. Cái gì đó như:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:alpha="0.38" android:color="?attr/colorOnSurface" android:state_enabled="false"/>
  <item android:alpha="0.6" android:color="?attr/colorOnSurface"/>
</selector>

Để thay đổi màu mấu chốt bạn phải sử dụng thuộc tính: boxStrokeColor.

<style name="Custom_textinputlayout_filledbox" parent="@style/Widget.MaterialComponents.TextInputLayout.FilledBox">
    ....
    <item name="boxStrokeColor">@color/selector_stroke_color</item>
</style>

Cũng trong trường hợp này, bạn nên sử dụng một bộ chọn. Cái gì đó như:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:color="?attr/colorPrimary" android:state_focused="true"/>
  <item android:alpha="0.87" android:color="?attr/colorOnSurface" android:state_hovered="true"/>
  <item android:alpha="0.12" android:color="?attr/colorOnSurface" android:state_enabled="false"/>
  <item android:alpha="0.38" android:color="?attr/colorOnSurface"/>
</selector>

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

Bạn cũng có thể áp dụng các thuộc tính này trong bố cục của mình:

<com.google.android.material.textfield.TextInputLayout
    style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
    app:boxStrokeColor="@color/selector_stroke_color"
    app:hintTextColor="?attr/colorPrimary"
    android:textColorHint="@color/selector_hint_text_color"
    ...>

1
Làm cách nào để thay đổi màu gạch dưới của EditText bên trong TextinputLayout? Ý tôi là trạng thái không tập trung. Đó là xám
Evgenii Vorobei

@EvgeniiVorobei Nó được mô tả trong câu trả lời. Nó được định nghĩa bởi boxStrokeColor. Trong ví dụ này các selector_stroke_colorđặc biệt là dòng cuối cùng:<item android:alpha="0.38" android:color="?attr/colorOnSurface"/>
Gabriele Mariotti

Cảm ơn bạn rất nhiều! Tôi không thể tự mình tìm ra nó.
Evgenii Vorobei

19

Thêm thuộc tính này trong thẻ Edittext và tận hưởng:

 android:backgroundTint="@color/colorWhite"

5
hiệu ứng: thay đổi màu đường kẻ trên các thiết bị có API cấp 21 trở lên
Ai đó ở đâu đó

17

Bài đăng trên Blog này mô tả các khía cạnh phong cách khác nhau EditTextAutoCompleteTextViewđược bao bọc bởiTextInputLayout .

Đối với EditTextAppCompat lib 22.1.0+, bạn có thể đặt thuộc tính chủ đề với một số cài đặt liên quan đến chủ đề:

<style name="StyledTilEditTextTheme">
   <item name="android:imeOptions">actionNext</item>
   <item name="android:singleLine">true</item>
   <item name="colorControlNormal">@color/greyLight</item>
   <item name="colorControlActivated">@color/blue</item>
   <item name="android:textColorPrimary">@color/blue</item>
   <item name="android:textSize">@dimen/styledtil_edit_text_size</item>
</style>

<style name="StyledTilEditText">
    <item name="android:theme">@style/StyledTilEditTextTheme</item>
    <item name="android:paddingTop">4dp</item>
</style>

và áp dụng chúng trên EditText:

<EditText
    android:id="@+id/etEditText"
    style="@style/StyledTilEditText"

Đối với AutoCompleteTextViewmọi thứ phức tạp hơn bởi vì gói nó trong TextInputLayoutvà áp dụng chủ đề này phá vỡ hành vi của nhãn nổi. Bạn cần sửa lỗi này trong mã:

private void setStyleForTextForAutoComplete(int color) {
    Drawable wrappedDrawable =     DrawableCompat.wrap(autoCompleteTextView.getBackground());
    DrawableCompat.setTint(wrappedDrawable, color);
    autoCompleteTextView.setBackgroundDrawable(wrappedDrawable);
}

và trong Activity.onCreate:

setStyleForTextForAutoComplete(getResources().getColor(R.color.greyLight));
autoCompleteTextView.setOnFocusChangeListener((v, hasFocus) -> {
    if(hasFocus) {
        setStyleForTextForAutoComplete(getResources().getColor(R.color.blue));
    } else {
        if(autoCompleteTextView.getText().length() == 0) {  
              setStyleForTextForAutoComplete(getResources().getColor(R.color.greyLight));
        }
    }
});

8

Nếu bạn muốn thay đổi màu thanh / dòng và màu văn bản gợi ý của TextInputLayout(màu nhấn bình thường là gì), thì chỉ cần tạo kiểu này:

<style name="MyStyle">
    <item name="colorAccent">@color/your_color</item>
</style>

Sau đó, áp dụng nó TextInputLayoutlàm chủ đề của bạn :

<android.support.design.widget.TextInputLayout
    ...
    app:theme="@style/MyStyle" />

Về cơ bản, điều này đặt một chủ đề (không phải phong cách) cho một chế độ xem (trái ngược với toàn bộ hoạt động).


Min SDK của bạn nên được 21
Azizjon Kholmatov

5
<style name="Widget.Design.TextInputLayout" parent="android:Widget">
    <item name="hintTextAppearance">@style/TextAppearance.Design.Hint</item>
    <item name="errorTextAppearance">@style/TextAppearance.Design.Error</item>
</style>

Bạn có thể ghi đè kiểu này cho bố cục

Và bạn cũng có thể thay đổi kiểu EditText-item bên trong.


làm thế nào để sử dụng phong cách này? có cách nào để ghi đè tất cả kiểu của ứng dụng tại một nơi không?
Hanzala

5
<style name="EditScreenTextInputLayoutStyle" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorControlNormal">@color/actionBar_background</item>
    <item name="colorControlActivated">@color/actionBar_background</item>
    <item name="colorControlHighlight">@color/actionBar_background</item>
    <item name="colorAccent">@color/actionBar_background</item>
    <item name="android:textColorHint">@color/actionBar_background</item>
</style>

áp dụng kiểu này cho TextInputLayout


2
chỉ ghi chú nhanh để áp dụng phong cách để TextInputLayout:android:theme="@style/EditScreenTextInputLayoutStyle"
jackycflau

5

A TextinputLayoutkhông phải là một lượt xem, mà là một Layout, như được miêu tả rất độc đáo bởi Dimitrios Tsigouris trong bài đăng trên blog của anh ấy tại đây . Do đó, bạn không cần a Style, Viewschỉ dùng cho mà hãy sử dụng a Theme. Sau bài đăng trên blog, tôi đã kết thúc với giải pháp sau:

Bắt đầu styles.xmlvới

<style name="TextInputLayoutAppearance" parent="Widget.Design.TextInputLayout">
        <!-- reference our hint & error styles -->
        <item name="android:textColor">@color/your_colour_here</item>
        <item name="android:textColorHint">@color/your_colour_here</item>
        <item name="colorControlNormal">@color/your_colour_here</item>
        <item name="colorControlActivated">@color/your_colour_here</item>
        <item name="colorControlHighlight">@color/your_colour_here</item>
</style>

Và trong bố cục của bạn, hãy thêm

<com.google.android.material.textfield.TextInputLayout
                android:theme="@style/TextInputLayoutAppearance"
...

1
Sử dụng Widget.MaterialComponents.TextInputLayout.OutlineBox trong cha mẹ
Sudip Sadhukhan
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.