1

我希望我的活动有两个可能的主题,例如Theme_HoloTheme_Holo_Light,由用户选择。我需要在这个活动中以编程方式绘制水平分隔线之类的东西。分隔线的颜色应取决于所选主题。我怎样才能轻松做到这一点?

理想情况下,无论使用什么主题,分隔线的标准颜色都应该有一个名称,并且该颜色名称的实际 RGB 实现将自动匹配所选主题。有这种事吗?在我看来,程序员不太可能需要对 RBG 值进行硬编码。

当然,分频器只是一个例子。我还想以不依赖于主题的方式命名 EditText 或其他小部件的颜色。

4

2 回答 2

0

在 Activity 的onCreate()方法中,在调用之前,使用;setContentView()设置主题this.setTheme(customTheme)

或试一试,在 Android 应用程序中使用主题

于 2013-08-03T00:18:15.387 回答
0

您可以创建自己的主题属性并在应用的主题中使用它们,并允许用户在应用的主题之间切换。

attrs.xml首先,在文件夹中创建一个文件/res/values并定义一些主题属性:

<resources>
    <attr name="myDividerColor" format="color" />
</resources>

接下来,在您的/res/values/styles.xml(或者/res/values/themes.xml如果您分别制作主题和样式)中制作两个主题。一个主题扩展了 Android 的深色主题,一个扩展了 Android 的浅色主题。将您的自定义属性添加到您的主题中:

<resources>
    <!-- Dark theme -->
    <style name="AppTheme_Dark" parent="@android:Theme.Holo">
        ...
        <item name="myDividerColor">@color/divider_dark</item>
    </style>

    <!-- Light theme. -->
    <style name="AppTheme_Light" parent="@android:Theme.Holo.Light">
        ...
        <item name="myDividerColor">@color/divider_light</item>
    </style>
</resources>

请注意,我使用了name="myDividerColor",而不是 android:name="myDividerColor"

最后,在您的活动代码中,您可以获得如下颜色:

// the attrs you want
int[] attrs = {R.attr.myDividerColor};
// get attr values for the current theme
TypedArray a = obtainStyledAttributes(attrs);
// first arg is the index of the array, in same order as attrs array above
// second arg is a default value (if not defined or not a resource) 
int dividerColor = a.getColor(0, Color.TRANSPARENT);
于 2013-08-03T03:03:25.627 回答