为什么TextInputLayout将使用样式颜色来绘制光标而不是下划线?

问题描述 投票:1回答:1

我正在尝试在TextInputEditText中设置TextInputLayout的下划线颜色。将colorControlActivated设置为所需的颜色时,光标会更改颜色,但是下划线没有响应。

我尝试过:

  • [定义了colorControlHighlightcolorControlNormalcolorControlActivated的样式创建。在布局文件和清单中同时设置小部件主题。
  • 将输入字段的背景设置为可绘制的图形,并手动绘制下划线。

这是在values / themes.xml中定义的样式:

<style name="AppTheme.DetailItem" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
    <item name="android:colorControlNormal">#ff0000</item>
    <item name="android:colorControlHighlight">#0000ff</item>
    <item name="android:colorControlActivated">#ff00ff</item>
</style>

并且应用了主题:

<com.google.android.material.textfield.TextInputLayout
    android:theme="@style/AppTheme.DetailItem"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    app:errorEnabled="true"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <com.google.android.material.textfield.TextInputEditText
        android:id="@+id/value"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:enabled="false"
        android:maxLines="1"
        android:textAppearance="?textAppearanceBody2"
        tools:text="Name" />
</com.google.android.material.textfield.TextInputLayout>

我希望TextInputEditText的下划线在聚焦时变为colorControlActivated,而在未聚焦时变为colorControlNormal。但是,无论如何,下划线颜色在未聚焦时仍为黑色,而在聚焦时为colorPrimary。但是,当焦点对准该字段时,光标的确会变为colorControlActivated,因此小部件可以识别我定义的样式,但未使用样式颜色绘制下划线。

android android-styles android-textinputlayout material-components-android android-textinputedittext
1个回答
0
投票

因为您使用的是FilledBox,所以下划线颜色由boxStrokeColor属性定义。

这是默认选择器:

<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>

您可以设置自定义选择器,也可以通过以下方式覆盖colorOnSurfacecolorPrimary颜色:>

<com.google.android.material.textfield.TextInputLayout
    android:theme="@style/AppTheme.DetailItem"
    ...>

其中:

  <style name="AppTheme.DetailItem">
    <item name="colorOnSurface">@color/...</item>
    <item name="colorPrimary">@color/....</item>
    ....
  </style>

enter image description here enter image description here

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