材料设计TextInputEditText未激活时的边框颜色

问题描述 投票:4回答:2

我将TextInputEditText小部件放在白色背景上。片段首次加载时,窗口小部件没有焦点。小部件周围的边框是白色(或几乎是白色),因此在白色背景上看不见。以下是该小部件的屏幕截图,在黑色背景上绘制以进行对比:

一旦我点击小部件,边框就会成为我原色的边框,这正是我想要的。激活窗口小部件后,这是一个类似的屏幕截图。

我试图通过一种风格控制这些颜色,我已经尝试了我能想到的一切,但我无法弄清楚如何调整这种颜色。这是我的风格(随意嘲笑各种尝试):

<style name="MyTextInputLayout" parent="Base.Widget.MaterialComponents.TextInputLayout">
    <item name="android:colorBackground">@android:color/black</item>
    <item name="android:textColorHint">@color/colorPrimary</item>
    <item name="android:paddingStart">16dp</item>
    <item name="android:paddingEnd">16dp</item>
    <item name="android:colorControlActivated">@android:color/black</item>
    <item name="android:colorControlNormal">@android:color/black</item>
    <item name="android:colorControlHighlight">@android:color/black</item>
    <item name="android:backgroundTint">@android:color/black</item>
    <item name="android:colorAccent">@android:color/black</item>
</style>

<style name="MyTextInputEditText" parent="ThemeOverlay.MaterialComponents.TextInputEditText">
    <item name="android:textColor">@android:color/black</item>
    <item name="android:colorBackground">@android:color/black</item>
    <item name="android:colorControlActivated">@android:color/black</item>
    <item name="android:colorControlNormal">@android:color/black</item>
    <item name="android:colorControlHighlight">@android:color/black</item>
    <item name="android:backgroundTint">@android:color/black</item>
    <item name="android:colorAccent">@android:color/black</item>
</style>

最后,布局的xml以防有用:

<com.google.android.material.textfield.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp"
    android:layout_marginBottom="16dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    style="@style/MyTextInputLayout">

    <com.google.android.material.textfield.TextInputEditText
        android:id="@+id/reg_username"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/username"
        style="@style/MyTextInputEditText"/>

</com.google.android.material.textfield.TextInputLayout>

如果窗口小部件未处于活动状态(即没有焦点),如何更改此边框颜色?

android material-design
2个回答
4
投票

我通过两个主要步骤解决了这个问题

  1. 我遇到的第一个问题是我的TextInputLayout样式的父样式需要更改为Widget.MaterialComponents.TextInputLayout.OutlinedBox
  2. 一旦我弄明白了,我就通过Android xml追踪该样式并找到了一个名为mtrl_box_stroke_color.xml的文件。这是一个选择器,其中声明了标准TextInputLayout边框的三种颜色。那个文件看起来像这样:

所以我复制了它并在res / color文件夹中创建了我自己的文件,我称之为edit_text_box_border.xml。我修改了三种颜色以适应我的目的,最终想出了这个:

<?xml version="1.0" encoding="utf-8"?>
<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="@color/colorPrimary" android:state_hovered="true"/>
    <item android:alpha="0.12" android:color="@color/colorPrimary" android:state_enabled="false"/>
    <item android:alpha="0.38" android:color="@color/colorPrimary"/>
</selector>

然后,回到我的风格,我不得不摆脱我的许多颜色尝试,并添加一个指向此文件的boxStrokeColor项目。以下是两种风格:

<style name="MyTextInputLayout" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
        <item name="android:textColorHint">@color/colorPrimary</item>
        <item name="android:paddingStart">16dp</item>
        <item name="android:paddingEnd">16dp</item>
        <item name="boxStrokeColor">@color/edit_text_box_border</item>
    </style>

    <style name="MyTextInputEditText" parent="ThemeOverlay.MaterialComponents.TextInputEditText.OutlinedBox.Dense">
        <item name="android:textColor">@android:color/black</item>
    </style>

现在,当我运行应用程序时,我从这开始:

enter image description here

当我点击它时,然后变成这个:

enter image description here

这就是我想要的,所以问题就解决了。希望这有助于某人。


2
投票

1.

<com.google.android.material.textfield.TextInputLayout
 ...
 style="@style/Widget.MaterialComponents.TextInputLayout.OutlineBox"
 app:boxStrokeColor = "@android:color/holo_purple"  
 //border color when in active status
 ...

2.在colors.xml文件中添加以下内容

<color name="mtrl_textinput_default_box_stroke_color">#00ff00</color> //border color when in inactive status

© www.soinside.com 2019 - 2024. All rights reserved.