gpt4 book ai didi

android - 管理多个按钮选择器?

转载 作者:行者123 更新时间:2023-11-29 01:53:02 24 4
gpt4 key购买 nike

我的计算器应用包含30 个按钮。我想为计算器键盘提供主题。主题会更改按钮背景(渐变,而非图像背景) 和字体。有些主题的所有按钮都使用相同的颜色,而有些主题的数字使用一种颜色,运算符使用另一种颜色等等。

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

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

button.setBackground(可绘制背景);

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

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

另外,如何保存用户主题选择?使用首选项?

最佳答案

您可以创建一个自定义 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 中更改按钮的纹理。

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

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

示例 9 补丁 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>

现在应用您的主题的 Activity 中的按钮具有自定义图像。但是,您可能会注意到它们在被选中时并没有改变外观。阅读下面的 Selector Drawables,了解如何使用多个 drawable 来定义一个根据状态变化的 drawable。”

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

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

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

关于android - 管理多个按钮选择器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16819065/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com