2

我的计算器应用程序由30 个按钮组成。我想为计算器键盘提供主题。主题更改按钮背景(渐变,而不是图像背景)和字体。有些主题的所有按钮颜色相同,而有些主题的颜色为数字,另一种颜色为运算符等等。

颜色变化是使用 res/drawable/*.xml 中的选择器

如何通过代码更改主题?希望避免打字:

button.setBackground(Drawable background);

button.setTypeface(font); 30 次。如果我有 5 个主题,那么 30 * 5 * 2 = 300 行代码!!

我是新手,如果没有其他方法,我会选择 150 行。

另外如何保存用户主题选择?使用偏好?

4

1 回答 1

1

您可以创建一个自定义 XML 主题,该主题将更改您的所有 XML 组件。创建新主题后,进入 Android Manifest 文件并更改主题。例如:

<activity
android:name="com.myapp.MyActivity"
...
android:theme="@style/MyCustomTheme" />

要创建主题,请转到 res/values/themes.xml 并使用标识符创建一个新主题:

<resources>
    ...
    <style name="MyCustomTheme" parent="android:style/Theme">
        <item name="android:textColorPrimary">#ffff0000</item>
    </style>
    ...
</resources>

通过使用这种方法,您可以创建一个广泛的不同主题库并更改为您想要的主题。

注意:这不仅用于更改背景,还可以用于更改按钮的主题。访问此网站了解更多信息:

http://janrain.com/blog/introduction-to-android-theme-customization/

编辑:正如该用户评论的那样,您可以将更改按钮主题的功能放在一个for()循环中。

对于您的情况,我是从上面的链接中得出的。它将更改 XML 文件中按钮的纹理,而不是 Java 中的。

“使用带有按钮的自定义九补丁

九个补丁可绘制是一种特殊的图像,可以在宽度和高度上缩放,同时保持其视觉完整性。尽管可以使用任何可绘制类型,但九个补丁是指定 Android 按钮外观的最常用方法。

示例九补丁 PNG。

注意边缘周围的一像素黑线,它们控制图像的缩放。

将此位图另存为 MyApplication/res/drawable/my_nine_patch.9.png 定义新样式(您可以在与上面的创建自定义 Android 主题定义自定义主题相同的文件中定义新样式)……:

<resources>
   ...
       <style name="MyCustomButton" parent="android:Widget.Button">
           <item name="android:background">@drawable/my_nine_patch</item>
       </style>
   ...
</resources>

将新按钮样式应用于自定义主题的 buttonStyle 属性:

<resources>
   ...
       <style name="MyCustomTheme" parent=...>
           ...
           <item name="android:buttonStyle">@style/MyCustomButton</item>
       </style>
   ...
</resources>

现在,您的主题应用到的活动中的按钮具有自定义图像。但是,您可能会注意到它们在选择时不会改变外观。阅读下面的 Selector Drawables,了解如何使用多个可绘制对象来定义一个可根据状态更改的可绘制对象。”

从这里,您可以更改主题的某些组件(例如作为图像的按钮纹理)。

在你有一个看起来不错的主题之后,将它应用到我上面提到的 Android Manifest 中。

如果它仍然没有回答您的问题,我将进一步编辑它。

于 2013-05-29T16:42:16.673 回答