TextInputLayout 不会设置 errorIconDrawable
TextInputLayout will not set errorIconDrawable
当我对 TextInputLayout
使用 style="@style/Widget.Design.TextInputLayout"
时,设置 app:errorIconDrawable
没有任何作用。只有在我不设置样式,让它继承应用主题的时候才有效(Theme.MaterialComponents.Light.NoActionBar
)。 app:endIconDrawable
也不起作用,我找不到这个问题的 alternative/solution。请帮忙!
在继承应用程序主题的同时可以使用以下内容:Theme.MaterialComponents.Light.NoActionBar
但我不想要这种样式,尤其是下划线与文本不对齐:
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/login_password_input_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="username"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/login_password_input_text"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.google.android.material.textfield.TextInputLayout>
这使用了我需要的样式但不会显示错误图标:
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/login_password_input_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="username"
style="@style/Widget.Design.TextInputLayout"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/login_password_input_text"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.google.android.material.textfield.TextInputLayout>
嗯,下面直接看你用不
style="@style/Widget.Design.TextInputLayout"
然后您的错误可绘制对象变为空。
我建议你的是,创建一个样式,根据需要修改值
<style name="TextLabel" parent="Widget.Design.TextInputLayout">
<item name="android:textColorHint">#f32</item>
<item name="android:textSize">20sp</item>
<item name="colorAccent">#4CAF50</item>
<item name="errorIconDrawable">@drawable/ic_baseline_error_24</item>
<item name="colorControlNormal">#673AB7</item>
<item name="colorControlActivated">#E91E63</item>
<item name="errorEnabled">true</item>
</style>
然后应用到via
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/login_password_input_layout"
android:theme="@style/TextLabel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:hint="username"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/login_password_input_text"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.google.android.material.textfield.TextInputLayout>
这应该可以解决。
由于您使用的是旧样式 Widget.Design.TextInputLayout
,它不支持 *.OutlinedBox
和 *.FilledBox
样式所具有的所有文本字段功能。
你不能在xml中设置errorIconDrawable
,你必须在TextInputLayout.setError
之后调用TextInputLayout.setErrorIconDrawable
。
login_password_input_layout.setError("Error text!!");
login_password_input_layout.setErrorIconDrawable(R.drawable....);
当我对 TextInputLayout
使用 style="@style/Widget.Design.TextInputLayout"
时,设置 app:errorIconDrawable
没有任何作用。只有在我不设置样式,让它继承应用主题的时候才有效(Theme.MaterialComponents.Light.NoActionBar
)。 app:endIconDrawable
也不起作用,我找不到这个问题的 alternative/solution。请帮忙!
在继承应用程序主题的同时可以使用以下内容:Theme.MaterialComponents.Light.NoActionBar
但我不想要这种样式,尤其是下划线与文本不对齐:
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/login_password_input_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="username"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/login_password_input_text"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.google.android.material.textfield.TextInputLayout>
这使用了我需要的样式但不会显示错误图标:
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/login_password_input_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="username"
style="@style/Widget.Design.TextInputLayout"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/login_password_input_text"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.google.android.material.textfield.TextInputLayout>
嗯,下面直接看你用不
style="@style/Widget.Design.TextInputLayout"
然后您的错误可绘制对象变为空。
我建议你的是,创建一个样式,根据需要修改值
<style name="TextLabel" parent="Widget.Design.TextInputLayout">
<item name="android:textColorHint">#f32</item>
<item name="android:textSize">20sp</item>
<item name="colorAccent">#4CAF50</item>
<item name="errorIconDrawable">@drawable/ic_baseline_error_24</item>
<item name="colorControlNormal">#673AB7</item>
<item name="colorControlActivated">#E91E63</item>
<item name="errorEnabled">true</item>
</style>
然后应用到via
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/login_password_input_layout"
android:theme="@style/TextLabel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:hint="username"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/login_password_input_text"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.google.android.material.textfield.TextInputLayout>
这应该可以解决。
由于您使用的是旧样式 Widget.Design.TextInputLayout
,它不支持 *.OutlinedBox
和 *.FilledBox
样式所具有的所有文本字段功能。
你不能在xml中设置errorIconDrawable
,你必须在TextInputLayout.setError
之后调用TextInputLayout.setErrorIconDrawable
。
login_password_input_layout.setError("Error text!!");
login_password_input_layout.setErrorIconDrawable(R.drawable....);