【问题标题】:How to set EditText style from styles.xml in Android?如何在 Android 中从 styles.xml 设置 EditText 样式?
【发布时间】: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);
}

【问题讨论】:

    标签: java android xml android-edittext android-styles


    【解决方案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_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>
    

    【讨论】:

    • 您好,感谢您的回复。我一直在寻找这样的东西。 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。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多