问题:在 android 中更改未聚焦的 TextInputLayout 的边框颜色或方框描边
Issue: change border color or box stroke for unfocused TextInputLayout in android
我有一个非常具体的问题,就是在 TextInputLayout 未聚焦时更改文本框的轮廓。我似乎找不到可以更改 "unfocused" 文本框边框颜色的属性。
这是我正在尝试做的事情的直观示例:
这个 (textbox):border 的颜色不是白色。目前它没有重点。
单击它后,它变成白色:
不知道要改什么,好像没有属性可以改。
我也在使用 material 设计文本输入布局样式,尽管我不知道这是否会影响它。
这是我的 xml 文本框代码:
<other layouts ... >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="70dp"
android:layout_gravity="bottom"
android:layout_margin="5dp"
android:background="@drawable/item_recycler_view">
<android.support.design.widget.TextInputLayout
android:id="@+id/dialog_text_input_layout"
style="@style/Widget.AppTheme.TextInputLayoutList"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Quick Add..."
android:textColorHint="@color/colorWhite"
app:boxStrokeColor="@color/colorWhite"
app:errorEnabled="true"
>
<android.support.design.widget.TextInputEditText
android:id="@+id/dialog_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:maxLines="1"
android:textColor="@color/colorWhite"
android:textSize="14sp" />
</android.support.design.widget.TextInputLayout>
</RelativeLayout>
</other layouts...>
下面是我为此使用的样式:
<style name="TextAppearance.AppTheme.TextInputLayout.HintTextAlt" parent="TextAppearance.MaterialComponents.Subtitle2">
<item name="android:textColor">@color/colorWhite</item>
</style>
<style name="Widget.AppTheme.TextInputLayoutList" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<item name="hintTextAppearance">@style/TextAppearance.AppTheme.TextInputLayout.HintTextAlt</item>
<item name="boxStrokeColor">@color/colorWhite</item>
<item name="boxCornerRadiusBottomEnd">5dp</item>
<item name="boxCornerRadiusBottomStart">5dp</item>
<item name="boxCornerRadiusTopEnd">5dp</item>
<item name="boxCornerRadiusTopStart">5dp</item>
<item name="android:layout_margin">5dp</item>
</style>
谢谢,欢迎任何帮助或建议!
如果您想在未聚焦模式下设置轮廓框的颜色而不是默认的黑色,您必须在 colors.xml
文件中添加此行,这将覆盖轮廓框的默认颜色。
照原样复制这一行。您可以根据需要更改颜色。
<color name="mtrl_textinput_default_box_stroke_color">#fff</color>
直到现在它都可以工作,要对 TextInputLayout 进行更多控制,您可以在 styles.xml
中添加此样式
<style name="TextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
<item name="boxStrokeColor">#fff</item>
<item name="boxStrokeWidth">2dp</item>
</style>
然后将主题添加到 TextInputLayout
android:theme="@style/TextInputLayoutStyle"
was right, but starting from 1.1.0-alpha02 (probably even alpha01) after this issue 已解决,可以使用相同的 boxStrokeColor
属性在颜色状态列表中定义颜色,例如它是如何在 lib 中完成的:
<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>
用法:
...
app:boxStrokeColor="@color/text_input_layout_stroke_color"
...
对于 Material 组件库,只需使用 boxStrokeColor
属性即可。
它可以与选择器一起使用。
只需使用类似的东西:
<com.google.android.material.textfield.TextInputLayout
app:boxStrokeColor="@color/text_input_layout_stroke_color"
..>
与:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:alpha="..." android:color="@color/...." android:state_focused="true"/>
<item android:alpha="..." android:color="@color/...." android:state_hovered="true"/>
<item android:alpha="..." android:color="@color/...." android:state_enabled="false"/>
<item android:alpha="..." android:color="@color/...."/> <!-- unfocused -->
</selector>
app:boxStrokeColor="#000000"
app:boxStrokeWidthFocused="0.5dp"
app:boxStrokeWidth="0.5dp"
这将使框颜色在它被聚焦时保持不变!
我有一个非常具体的问题,就是在 TextInputLayout 未聚焦时更改文本框的轮廓。我似乎找不到可以更改 "unfocused" 文本框边框颜色的属性。
这是我正在尝试做的事情的直观示例:
这个 (textbox):border 的颜色不是白色。目前它没有重点。 单击它后,它变成白色:
不知道要改什么,好像没有属性可以改。
我也在使用 material 设计文本输入布局样式,尽管我不知道这是否会影响它。
这是我的 xml 文本框代码:
<other layouts ... >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="70dp"
android:layout_gravity="bottom"
android:layout_margin="5dp"
android:background="@drawable/item_recycler_view">
<android.support.design.widget.TextInputLayout
android:id="@+id/dialog_text_input_layout"
style="@style/Widget.AppTheme.TextInputLayoutList"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Quick Add..."
android:textColorHint="@color/colorWhite"
app:boxStrokeColor="@color/colorWhite"
app:errorEnabled="true"
>
<android.support.design.widget.TextInputEditText
android:id="@+id/dialog_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:maxLines="1"
android:textColor="@color/colorWhite"
android:textSize="14sp" />
</android.support.design.widget.TextInputLayout>
</RelativeLayout>
</other layouts...>
下面是我为此使用的样式:
<style name="TextAppearance.AppTheme.TextInputLayout.HintTextAlt" parent="TextAppearance.MaterialComponents.Subtitle2">
<item name="android:textColor">@color/colorWhite</item>
</style>
<style name="Widget.AppTheme.TextInputLayoutList" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<item name="hintTextAppearance">@style/TextAppearance.AppTheme.TextInputLayout.HintTextAlt</item>
<item name="boxStrokeColor">@color/colorWhite</item>
<item name="boxCornerRadiusBottomEnd">5dp</item>
<item name="boxCornerRadiusBottomStart">5dp</item>
<item name="boxCornerRadiusTopEnd">5dp</item>
<item name="boxCornerRadiusTopStart">5dp</item>
<item name="android:layout_margin">5dp</item>
</style>
谢谢,欢迎任何帮助或建议!
如果您想在未聚焦模式下设置轮廓框的颜色而不是默认的黑色,您必须在 colors.xml
文件中添加此行,这将覆盖轮廓框的默认颜色。
照原样复制这一行。您可以根据需要更改颜色。
<color name="mtrl_textinput_default_box_stroke_color">#fff</color>
直到现在它都可以工作,要对 TextInputLayout 进行更多控制,您可以在 styles.xml
中添加此样式<style name="TextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
<item name="boxStrokeColor">#fff</item>
<item name="boxStrokeWidth">2dp</item>
</style>
然后将主题添加到 TextInputLayout
android:theme="@style/TextInputLayoutStyle"
boxStrokeColor
属性在颜色状态列表中定义颜色,例如它是如何在 lib 中完成的:
<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>
用法:
...
app:boxStrokeColor="@color/text_input_layout_stroke_color"
...
对于 Material 组件库,只需使用 boxStrokeColor
属性即可。
它可以与选择器一起使用。
只需使用类似的东西:
<com.google.android.material.textfield.TextInputLayout
app:boxStrokeColor="@color/text_input_layout_stroke_color"
..>
与:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:alpha="..." android:color="@color/...." android:state_focused="true"/>
<item android:alpha="..." android:color="@color/...." android:state_hovered="true"/>
<item android:alpha="..." android:color="@color/...." android:state_enabled="false"/>
<item android:alpha="..." android:color="@color/...."/> <!-- unfocused -->
</selector>
app:boxStrokeColor="#000000"
app:boxStrokeWidthFocused="0.5dp"
app:boxStrokeWidth="0.5dp"
这将使框颜色在它被聚焦时保持不变!