以编程方式编辑样式(当用户更改设置时)

时间:2015-03-01 14:13:01

标签: android android-layout android-styles

注意:我不打算设置样式,我想动态更改styles.xml中声明的样式。

例如,我的应用程序有一个小部件,其布局如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<TextView
    android:id="@+id/widgettext1"
    style="@style/My.WidgetTextView"/>
<TextView
    android:id="@+id/widgettext2"
    style="@style/My.WidgetTextView"/>
<TextView
    android:id="@+id/widgettext3"
    style="@style/My.WidgetTextView"/>
<TextView
    android:id="@+id/widgettext4"
    style="@style/My.WidgetTextView"/>
</LinearLayout>

在styles.xml中我有这个:

<style name="My.WidgetTextView" parent="android:Widget.TextView">
    <item name="android:background">#99221111</item>
    <item name="android:gravity">center_horizontal|center_vertical</item>
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">25sp</item>
    <item name="android:enabled">true</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textColor">#FFFFFF</item>
    <item name="android:textSize">@dimen/widget_font</item>
</style>

现在,我想允许用户更改一些视觉设置,例如文本大小或背景颜色。

最简单的方法似乎是以某种方式编辑样式,所以我不必将它应用于每个textview或其他东西。这可能吗?

有人可以建议创建一堆样式并让用户在它们之间进行选择,但这不是我想要的。

1 个答案:

答案 0 :(得分:0)

您可以设置样式,例如My.WidgetTextView以编程方式使用:

ContextThemeWrapper context = new ContextThemeWrapper(Context, R.style.My.WidgetTextView);

TextView myText = new TextView(context);

但是,您无法以编程方式更改My.WidgetTextView的属性。