在启用和禁用视图中使用自定义提示文本颜色提示
Use custom hint text color for hints in enabled and disabled views
我正在尝试向 TextInputLayout 和 TextInputEditText 添加自定义样式,但无法获得预期的结果。
我需要的是为启用视图中的提示提供自定义颜色 "A",为禁用视图中的提示提供自定义颜色 "B"。
现在我有一个带有提示选择器的样式 enabled/disabled。这是款式:
<style name="CustomTextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
<item name="boxStrokeColor">@color/input_blue</item>
<item name="boxStrokeWidth">2dp</item>
<item name="errorTextAppearance">@style/ErrorText</item>
<item name="android:textColorHint">@color/selector_edithintcolor</item>
</style>
这是选择器,你可以看到颜色来说明重点:
现在布局中的一些组件:
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/layout_text_disabled"
style="@style/CustomTextInputLayoutStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginTop="32dp"
android:layout_marginEnd="32dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/layout_phone_not_focused">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/txt_text_disabled"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint_deactivated"
android:inputType="text"
android:text="@string/txt_disabled" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/layout_text_disabled_hint"
style="@style/CustomTextInputLayoutStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginTop="32dp"
android:layout_marginEnd="32dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/layout_text_disabled">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/txt_text_disabled_hint"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint_deactivated"
android:inputType="text" />
</com.google.android.material.textfield.TextInputLayout>
另外,我有一个按钮可以将这 2 个视图的状态从启用更改为禁用,行为如下:
启用视图后,一切都如预期,提示根据选择器显示为绿色:
现在,当我禁用视图时,这就是我得到的:
有什么想法可以让禁用的提示根据选择器变成橙色吗?提前致谢!
在这个 link 之后,似乎现在可以使用 com.google.android.material 的 1.2.0-alpha03 版本:material
您需要像这样创建一个颜色状态列表:
box_stroke_color_state_list.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="?colorPrimary" android:state_enabled="true" />
<item android:color="?colorSecondary" android:state_hovered="true" />
<item android:color="?colorSecondary" android:state_focused="true" />
<!-- This is where the disable hint and box will take it's color -->
<item android:alpha="@dimen/material_emphasis_disabled" android:color="@android:color/holo_green_dark" android:state_enabled="false" />
<item android:color="@color/mtrl_textinput_default_box_stroke_color" />
</selector>
然后在您的代码中调用它:
ContextCompat.getColorStateList(context, R.color.box_stroke_color_state_list)?.let {
layout_text_disabled_hint.setBoxStrokeColorStateList(it)
}
根据@Caktuspace 的回复,您可以通过以下方式申请:
layout.xml
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/til"
...
android:hint="@string/hello"
android:textColorHint="@color/hint_text_color_textinputlayout">
hint_text_color_textinputlayout.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:alpha="@dimen/material_emphasis_disabled" android:color="@color/desiredColorDisabled" android:state_enabled="false" />
<item android:color="@color/desiredColorEnabled" />
</selector>
我正在尝试向 TextInputLayout 和 TextInputEditText 添加自定义样式,但无法获得预期的结果。 我需要的是为启用视图中的提示提供自定义颜色 "A",为禁用视图中的提示提供自定义颜色 "B"。
现在我有一个带有提示选择器的样式 enabled/disabled。这是款式:
<style name="CustomTextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
<item name="boxStrokeColor">@color/input_blue</item>
<item name="boxStrokeWidth">2dp</item>
<item name="errorTextAppearance">@style/ErrorText</item>
<item name="android:textColorHint">@color/selector_edithintcolor</item>
</style>
这是选择器,你可以看到颜色来说明重点:
现在布局中的一些组件:
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/layout_text_disabled"
style="@style/CustomTextInputLayoutStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginTop="32dp"
android:layout_marginEnd="32dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/layout_phone_not_focused">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/txt_text_disabled"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint_deactivated"
android:inputType="text"
android:text="@string/txt_disabled" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/layout_text_disabled_hint"
style="@style/CustomTextInputLayoutStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginTop="32dp"
android:layout_marginEnd="32dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/layout_text_disabled">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/txt_text_disabled_hint"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint_deactivated"
android:inputType="text" />
</com.google.android.material.textfield.TextInputLayout>
另外,我有一个按钮可以将这 2 个视图的状态从启用更改为禁用,行为如下:
启用视图后,一切都如预期,提示根据选择器显示为绿色:
现在,当我禁用视图时,这就是我得到的:
有什么想法可以让禁用的提示根据选择器变成橙色吗?提前致谢!
在这个 link 之后,似乎现在可以使用 com.google.android.material 的 1.2.0-alpha03 版本:material 您需要像这样创建一个颜色状态列表:
box_stroke_color_state_list.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="?colorPrimary" android:state_enabled="true" />
<item android:color="?colorSecondary" android:state_hovered="true" />
<item android:color="?colorSecondary" android:state_focused="true" />
<!-- This is where the disable hint and box will take it's color -->
<item android:alpha="@dimen/material_emphasis_disabled" android:color="@android:color/holo_green_dark" android:state_enabled="false" />
<item android:color="@color/mtrl_textinput_default_box_stroke_color" />
</selector>
然后在您的代码中调用它:
ContextCompat.getColorStateList(context, R.color.box_stroke_color_state_list)?.let {
layout_text_disabled_hint.setBoxStrokeColorStateList(it)
}
根据@Caktuspace 的回复,您可以通过以下方式申请:
layout.xml
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/til"
...
android:hint="@string/hello"
android:textColorHint="@color/hint_text_color_textinputlayout">
hint_text_color_textinputlayout.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:alpha="@dimen/material_emphasis_disabled" android:color="@color/desiredColorDisabled" android:state_enabled="false" />
<item android:color="@color/desiredColorEnabled" />
</selector>