问题:在Android中更改未聚焦的TextInputLayout的边框颜色或框描边

时间:2018-09-05 01:06:29

标签: android textview android-textinputlayout android-textattributes

我有一个非常具体的问题,即当文本输入框未聚焦时更改文本框的轮廓。我似乎找不到用于更改“未聚焦”文本框边框颜色的属性。

这是我要做的事的直观示例:

此(文本框):边框的颜色不是白色。目前还没有集中。 单击它后,它变成白色:

我不知道需要更改什么,似乎没有可以更改的属性。

我也使用了材料设计文本输入布局样式,尽管我看不出这是否会影响它。

这是我在文本框中的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>

谢谢,欢迎提供任何帮助或建议!

4 个答案:

答案 0 :(得分:21)

使用材料成分库,只需使用 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>

enter image description here enter image description here

答案 1 :(得分:12)

如果要在未聚焦模式下将轮廓框的颜色设置为默认黑色,而不是默认的黑色,则必须在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"

答案 2 :(得分:1)

Answer from Amjad是正确的,但是从解决此1.1.0-alpha02issue(可能甚至是alpha01)开始,就可以使用相同的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>

答案 3 :(得分:0)

app:boxStrokeColor="#000000"
app:boxStrokeWidthFocused="0.5dp"
app:boxStrokeWidth="0.5dp"

这将使框颜色恒定事件成为焦点!