如何在Android中的styles.xml中设置EditText样式?

问题描述

我正在生成EditText字段,并希望通过 styles.xml 文件设置其样式。但无法做到这一点。我可以设置一些参数,但是我更愿意使用styles.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);
}

解决方法

您可以像正在执行的操作一样为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_width="wrap_content"
    android:layout_height="wrap_content"
    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>
,

我在这里找到了解决方案。 Android: set view style programmatically

editTextFieldTitle = new EditText(new ContextThemeWrapper(getBaseContext(),R.style.input_fields_single_line),null,0);
,

EditText中有一个名为styles的属性。如果要自定义它,而不是在drawable中创建自己的样式,则为一个新的XML,并使用styles属性链接到editText。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...