如何在 Android 中从 styles.xml 设置 EditText 样式?
Posted
技术标签:
【中文标题】如何在 Android 中从 styles.xml 设置 EditText 样式?【英文标题】:How to set EditText style from styles.xml in Android? 【发布时间】:2020-12-30 18:58:58 【问题描述】:我正在生成 EditText
字段并希望从 styles.xml 文件中设置它的样式。但无法做到。我可以设置一些参数,但我宁愿使用 style.xml 中的样式,这样以后如果需要更改会更容易。
styles.xml
<style name="input_fields_single_line">
<item name="android:padding">8dp</item>
<item name="android:background">@drawable/input_field_shape</item>
<item name="android:maxLines">1</item>
</style>
Java 代码:
List<EditText> inputFieldList = new ArrayList<EditText>();
public void generateInputFields()
EditText editTextFieldTitle = new EditText(this);
inputFieldList.add(editTextFieldTitle);
editTextFieldTitle.setHint(R.string.enter_field_title);
editTextFieldTitle.setMaxLines(1);
editTextFieldTitle.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
editTextFieldTitle.setFocusableInTouchMode(true);
editTextFieldTitle.requestFocus();
myLayout.addView(editTextFieldTitle);
【问题讨论】:
【参考方案1】:您为 EditText 创建一个单独的样式,就像您正在做的那样,但以 Widget.EditText 为父,如下所示:
<style name="MyCustomeEditTextStyle" parent="@android:style/Widget.EditText">
...add as many items as you need
<item name="android:padding">8dp</item>
<item name="android:background">@drawable/input_field_shape</item>
<item name="android:maxLines">1</item>
</style>
然后在 xml 中的每个编辑文本中调用您的样式,如下所示:
<EditText
android:id="@+id/editTextId"
android:layout_
android:layout_
style="@style/MyCustomeEditTextStyle" />
但是,如果您希望它被全局设置一次并且没有 xml 设置,因为您正在像这样以编程方式生成 EditText:
EditText editTextFieldTitle = new EditText(this);
然后您可以像这样在应用程序样式中设置您的样式:
<style name="AppTheme" parent="@android:style/YourParentTheme">
<item name="android:editTextStyle">@style/MyCustomeEditTextStyle</item>
</style>
【讨论】:
您好,感谢您的回复。我一直在寻找这样的东西。 editTextFieldTitle = new EditText(new ContextThemeWrapper(this,R.style.input_fields_single_line));但是由于某种原因它不起作用 在你说的问题中:“我正在生成 EditText 字段并希望从 styles.xml 资源文件中设置其样式。但无法做到” 您能否从styles.xml 中详细说明您想为EditText 的哪个部分设置样式 谢谢,我找到了解决方案。我必须在构造函数中放置 3 个参数 很高兴听到这个消息【参考方案2】:我在这里找到了解决方案。 Android: set view style programmatically
editTextFieldTitle = new EditText(new ContextThemeWrapper(getBaseContext(),R.style.input_fields_single_line),null,0);
【讨论】:
【参考方案3】:EditText 中有一个名为 styles 的属性,使用它。如果你想自定义它而不是在 drawable 中创建自己的样式,一个新的 XML 并使用 styles 属性链接到 editText。
【讨论】:
以上是关于如何在 Android 中从 styles.xml 设置 EditText 样式?的主要内容,如果未能解决你的问题,请参考以下文章
android:hint 在 styles.xml 中声明,但仍有警告“您应该为 EditText 提供 `android:hint`”