android - 如何更改Android Material TextInputLayout组件的非活动边框笔触颜色
问题描述
我正在尝试设置 TextInputLayout 不聚焦的边框笔触颜色。同样,有太多的问题和答案,我都试过了。就像创建样式并用作主题一样,创建颜色选择器并应用它,也可以直接应用 app:boxStrokeColor 和颜色选择器。但这些可用的解决方案都不行。
不知道,我在哪里做错了或者我仍然缺少什么。我将我的代码推送到了 github 的测试项目,以便更好地了解我的整个设置。以下是一些示例代码以供快速查看:
activity_main.xml(ConstraintLayout 内的 TextInputLayout)
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!-- Tried this as well - app:boxStrokeColor="@color/text_input_box_stroke_color" -->
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/emailTextInputLayout"
android:hint="Email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:theme="@style/TextInputLayoutStyle"
android:layout_marginHorizontal="24dp"
app:layout_constraintTop_toBottomOf="@id/toolbar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/emailTextInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:importantForAutofill="no"
android:inputType="textEmailAddress" />
</com.google.android.material.textfield.TextInputLayout>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="TextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
<item name="boxStrokeColor">#FF00CC</item>
<item name="boxStrokeWidth">2dp</item>
</style>
</resources>
text_input_box_stroke_color.xml(颜色选择器)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/mtrl_textinput_focused_box_stroke_color" android:state_focused="true"/>
<item android:color="@color/mtrl_textinput_hovered_box_stroke_color" android:state_hovered="true"/>
<item android:color="@color/mtrl_textinput_disabled_color" android:state_enabled="false"/>
<item android:color="@color/mtrl_textinput_default_box_stroke_color"/>
</selector>
如果有人可以提供一些指导和建议并帮助我找出我犯的任何错误,那将是很大的帮助。
提前致谢。
解决方案
我已经测试了您的代码,并且在您进行以下更改后它可以工作:
1.首先更改您的res/color/text_input_box_stroke_color.xml如下所示,以查看不同的状态颜色。在下面的示例中,我为聚焦状态设置了红色,为默认非活动状态设置了浅蓝色:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@android:color/holo_red_dark" android:state_focused="true" />
<item android:color="@android:color/holo_green_dark" android:state_hovered="true" />
<item android:color="@color/mtrl_textinput_disabled_color" android:state_enabled="false" />
<item android:color="@android:color/holo_blue_light" />
</selector>
2.然后使用链接到上述选择器的boxStrokeColor更改res/values/styles.xml,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="TextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
<item name="boxStrokeColor">@color/text_input_box_stroke_color</item>
<item name="boxStrokeWidth">2dp</item>
</style>
</resources>
3.Finally 在您的TextInputLayout中添加如下样式:
<com.google.android.material.textfield.TextInputLayout
style="@style/TextInputLayoutStyle"
android:id="@+id/emailTextInputLayout"
目前您添加的样式如下:android:theme="@style/TextInputLayoutStyle"而不是style="@style/TextInputLayoutStyle"
推荐阅读
- javascript - 无法使用 .addClass() 方法为 html 中的复选框添加类
- aws-lambda - 集成响应 SAM 模板
- c# - NavigationBar 中的 Xamarin 窗体图像不可见
- javascript - 防止 vs 代码将 Express JS 代码格式化为换行符
- rest - 是否更喜欢在同一个项目中使用 GraphQL 进行查询和 REST 进行变异操作?
- javascript - 图片上传jodit编辑器中的自定义url
- azure - 通过 ARM 将 Key Vault 访问策略添加到现有 Key Vault
- docker - 在多个主机上使用 docker / docker-compose 的 Elasticsearch 集群
- visual-studio - 在部署的应用程序中创建额外的目标参数
- java - 如何在 k 个学生之间分配最多的巧克力