Android自定义EditTextPreference输入框
Posted 码上夏雨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android自定义EditTextPreference输入框相关的知识,希望对你有一定的参考价值。
android自定义EditTextPreference输入框
前言
Android想要对布局或者控件进行修改,往往采取两种方式
- 自定义样式继承父样式,并赋值
- 找到Android定义的布局,在自己的 layout 文件夹使用同名文件进行替换
效果预览
左边是默认 EditText 样式,右边是修改好的样式
![](https://image.cha138.com/20220719/d73efc688d144a4aacccff8b7e3e8336.jpg)
![](https://image.cha138.com/20220719/bd404add05324269a69c3fa5bc47502c.jpg)
具体实现
查看Material Design 3文档
任何的样式定义都应该先查看官方文档,样例App的主题是 Theme.Material3.Light.NoActionBar,因此先访问 Material3 Dialogs ,查看官方文档是否给了自定义布局的方式。经过查看发现并不可以。这是就要查找到样式对应的布局资源进行替换。
![](https://image.cha138.com/20220719/875ed5f595b042afbf01a2ff0412517a.jpg)
本地布局资源替换
首先,系统对于 Preference 的样式定义是由 BasePreferenceThemeOverlay 定义的,具体文件路径如下
![](https://image.cha138.com/20220719/0b7ba9ae08384f2683b49442813a5c6b.jpg)
能够看到 editTextPreferenceStyle 对应的样式是 @style/Preference.DialogPreference.EditTextPreference.Material ,找到对应的源码进行查看
<style name="Preference.DialogPreference.EditTextPreference">
<item name="android:dialogLayout">@layout/preference_dialog_edittext</item>
</style>
<style name="Preference.DialogPreference.EditTextPreference.Material">
<item name="android:layout">@layout/preference_material</item>
<item name="allowDividerAbove">false</item>
<item name="allowDividerBelow">true</item>
<item name="singleLineTitle">false</item>
<item name="iconSpaceReserved">@bool/config_materialPreferenceIconSpaceReserved</item>
</style>
这时就找到输入框对应的布局是 preference_dialog_edittext ,这样在本地 layout 文件夹下面创建一个同名 xml 文件即可
![](https://image.cha138.com/20220719/f03481ab167d4b7db26507f7df91b351.jpg)
注意事项
在系统样式定义中, EditText 的 id 是 @android:id/edit
,因此你自定义布局中的输入控件也应该是 @android:id/edit
,否则会报错
![](https://image.cha138.com/20220719/01b4f9fca6844774aa992994f755a91c.jpg)
参考文档
以上是关于Android自定义EditTextPreference输入框的主要内容,如果未能解决你的问题,请参考以下文章