如何在 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 样式?的主要内容,如果未能解决你的问题,请参考以下文章

相当于Xcode中android的styles.xml

android:hint 在 styles.xml 中声明,但仍有警告“您应该为 EditText 提供 `android:hint`”

Android开发主题样式详解

我可以以编程方式更改 Xamarin.Forms 中的 styles.xml 吗?

请问如何修改android中页面顶部的文字

总结一下Android中主题(Theme)的正确玩法