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 EditText
bên trong TextinputLayout
. Xin vui lòng giúp đỡ.
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 EditText
bên trong TextinputLayout
. Xin vui lòng giúp đỡ.
Câu trả lời:
<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 .
<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">
<android.support.design.widget.TextInputLayout
...
app:hintTextAppearance="@style/MyHintStyle"
android:textColorHint="#c1c2c4">
Cảm ơn @AlbAtNf
android:textColorHint
thành TextInputLayout
trong XML.
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:
Không có tiêu điểm:
Thông báo lỗi:
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:
hintTextColor
và android: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>
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"
...>
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"/>
Thêm thuộc tính này trong thẻ Edittext và tận hưởng:
android:backgroundTint="@color/colorWhite"
Bài đăng trên Blog này mô tả các khía cạnh phong cách khác nhau EditText
và AutoCompleteTextView
được bao bọc bởiTextInputLayout
.
Đối với EditText
và AppCompat 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 AutoCompleteTextView
mọi thứ phức tạp hơn bởi vì gói nó trong TextInputLayout
và á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));
}
}
});
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ó TextInputLayout
là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).
<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.
<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
android:theme="@style/EditScreenTextInputLayoutStyle"
A TextinputLayout
khô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
, Views
chỉ 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.xml
vớ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"
...