简体   繁体   中英

How to set EditText style from styles.xml in Android?

I'm generating EditText fields and wish to set it's style from styles.xml file. But can't manage to do it. I can set some parameters, but I would rather use a style from styles.xml so it would be easier to change later if needed.

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 code:

 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);
}

You create a separate style for the EditText like what you are doing but parented with the Widget.EditText like the following:

<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>

Then call your style inside each edit text in the xml like the following:

<EditText
    android:id="@+id/editTextId"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    style="@style/MyCustomeEditTextStyle" />

BUT if you are want it to be globally set once and set without the xml because you are generating your EditText programmatically like this:

EditText editTextFieldTitle = new EditText(this);

you can then set your style in the application style like this:

<style name="AppTheme" parent="@android:style/YourParentTheme">
    <item name="android:editTextStyle">@style/MyCustomeEditTextStyle</item>
</style>

I found the solution here. Android: set view style programmatically

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

EditText 中有一个属性叫做样式,使用那个。如果你想自定义它而不是在 drawable 中创建自己的样式,一个新的 XML 并使用样式属性链接到 editText。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM