我将一个 TextInputEditText 小部件放在白色背景上。当 fragment 首次加载时,小部件没有焦点。小部件周围的边框是白色的(或几乎是白色的),因此它在白色背景上是不可见的。这是该小部件的屏幕截图,绘制在黑色背景上以形成对比:
只要我点击小部件,边框就会变成我的原色,这正是我想要的。这是激活小部件后的类似屏幕截图。
我试图通过一种样式来控制这些颜色,我已经尝试了所有我能想到的方法,但我无法弄清楚如何调整该颜色。这是我的风格(各种尝试请随意笑):
<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>
当小部件未处于 Activity 状态(即没有焦点)时,如何更改此边框颜色?
最佳答案
我通过两个主要步骤解决了这个问题:
我遇到的第一个问题是我的 TextInputLayout 样式的父样式需要更改为 Widget.MaterialComponents.TextInputLayout.OutlinedBox。
弄清楚这一点后,我就跟踪了该样式的 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>
现在,当我运行该应用程序时,我从这里开始:
当我点击它时会变成这样:
这就是我想要的,所以问题解决了。希望这对某人有帮助。
关于android - Material Design TextInputEditText 未激活时的边框颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53405483/