问题:在android中更改未聚焦的TextInputLayout的边框颜色或框行程

Var*_*ind 9 android textview android-textattributes android-textinputlayout

我有一个非常具体的问题,当TextInputLayout没有聚焦时,它会改变TextInputLayout文本框的轮廓.我似乎无法找到一个属性来更改我的"未聚焦"文本框边框的颜色.

这是我正在尝试做的一个视觉示例:

此(文本框)的颜色:边框不是白色.目前它没有集中精力.点击它后,它变成白色:

我不知道我需要改变什么,似乎没有一个属性可以改变它.

我也使用材料设计文本输入布局样式,虽然我不知道这是否会影响它.

这是我的文本框的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...>
Run Code Online (Sandbox Code Playgroud)

以下是我用于此的样式:

<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>
Run Code Online (Sandbox Code Playgroud)

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

Amj*_*jad 31

如果要在未聚焦模式下设置轮廓框的颜色而不是默认的黑色,则必须在colors.xml文件中添加此行,该行将覆盖轮廓框的默认颜色.

按原样复制此行.你可以改变你想要的颜色.

<color name="mtrl_textinput_default_box_stroke_color">#fff</color>
Run Code Online (Sandbox Code Playgroud)

到目前为止它可以工作,为了更好地控制TextInputLayout,你可以在styles.xml中添加这个样式

<style name="TextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
    <item name="boxStrokeColor">#fff</item>
    <item name="boxStrokeWidth">2dp</item>
</style>
Run Code Online (Sandbox Code Playgroud)

然后将主题添加到TextInputLayout

android:theme="@style/TextInputLayoutStyle"
Run Code Online (Sandbox Code Playgroud)

  • @VarunGovind,我们很欢迎您,希望对这个答案进行投票,它对我有很大帮助,有关更多信息,请参见github [here](https://github.com/material-components/material-components- android / issues / 112),有关color.xml中更多的默认值,您可以访问[this](https://github.com/material-components/material-components-android/blob/master/lib/java/com/ google / android / material / textfield / res / values / colors.xml)或[访问](https://github.com/material-components/material-components-android)了解更多信息。 (2认同)
  • 如何以编程方式设置相同? (2认同)
  • '&lt;color name="mtrl_textinput_default_box_rinkle_color"&gt;#fff&lt;/color&gt;' 但这会将所有 TextInputLayout 更改为白色,如果我想在单个活动或片段中更改它怎么办? (2认同)

Gab*_*tti 29

使用材料组件库只需使用该boxStrokeColor属性。
它可以与选择器一起使用。

只需使用类似的东西:

    <com.google.android.material.textfield.TextInputLayout
        app:boxStrokeColor="@color/text_input_layout_stroke_color"
        ..>
Run Code Online (Sandbox Code Playgroud)

和:

<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>
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明在此处输入图片说明


dil*_*lix 11

Amjad 的回答是正确的,但是从1.1.0-alpha02(甚至可能是 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>
Run Code Online (Sandbox Code Playgroud)

用法:

...
app:boxStrokeColor="@color/text_input_layout_stroke_color"
...
Run Code Online (Sandbox Code Playgroud)

  • 如何将此选择器添加到 TextInputLayout 中? (4认同)
  • 对于这里的任何新手,选择器“text_input_layout_lines_color”必须在“res/color”内创建,而不是在“res/drawable”内创建 (2认同)

Par*_*kon 9

app:boxStrokeColor="#000000"
app:boxStrokeWidthFocused="0.5dp"
app:boxStrokeWidth="0.5dp"
Run Code Online (Sandbox Code Playgroud)

这将使框颜色在它聚焦的事件中保持不变!