android - 如何为自定义 TextInputLayout 设置默认样式
问题描述
我想用默认样式创建 au 自定义 TextInputLayout。但是没有应用样式。
class AutoCompleteTextInputLayout @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = R.style.AppTheme_TextInputLayout_DropdownMenu
): TextInputLayout(context, attrs) {
init {
context.inflater.inflate(R.layout.auto_complete_text_input_layout, this,true)
}
}
<style name="AppTheme.TextInputLayout.DropdownMenu" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu">
<item name="endIconMode">dropdown_menu</item>
</style>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<AutoCompleteTextView
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</merge>
我不希望默认情况下将这种样式应用于所有 TextInputLayout 因为我已经有一个如下所示:
<style name="AppTheme" parent="Theme.MaterialComponents.Light">
<item name="textInputStyle">@style/AppTheme.TextInputLayout</item>>
</style>
在此先感谢您的帮助
解决方案
您不能使用构造函数,R.style.AppTheme_TextInputLayout_DropdownMenu
因为 的第三个参数TextInputLayout
不是样式,而是属性主题 as R.attr.textInputStyle
。
你可以使用类似的东西:
public class AutoCompleteTextInputLayout @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = R.attr.textInputStyle
) : TextInputLayout(ContextThemeWrapper(context, R.style.Custom_Theme),
attrs, defStyleAttr) { ... }
带有自定义主题:
<style name="Custom.Theme" parent="">
<item name="textInputStyle">@style/AppTheme.TextInputLayout.DropdownMenu</item>
</style>
通过这种方式,您将创建一个具有指定主题 ( Custom.Theme
) 的新上下文包装器。此主题仅由自定义小部件使用AutoCompleteTextInputLayout
。
这意味着其他TextInputLayout
的继续使用默认样式(由 中的属性定义textInputStyle
)AppTheme
。
例子:
<AutoCompleteTextInputLayout>
<com.google.android.material.textfield.TextInputEditText/>
</AutoCompleteTextInputLayout>
<com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputEditText/>
</com.google.android.material.textfield.TextInputLayout>
推荐阅读
- swift - CTFontGetAdvancesForGlyphs 是如何工作的?
- python - Django Queryset 线程安全读取
- machine-learning - 在逻辑回归(Scikit-learn)中选择合适的容差值
- java - @Scheduled 从控制器
- javascript - 如何仅使用部分预定义的可用键创建类型?
- android - 如何使垂直滚动列表与视图寻呼机同步
- android - Android 应用上的 Admob 个性化广告用户同意
- kubernetes - 如何在 Kubernetes 中使用来自 Airflow 的 DockerOperator
- c# - UWP - 修改文件时 RandomAccessStream 退出
- c - 在 C 中,我如何访问/迭代动态添加到 fd_set 的文件描述符?