0

我正在开发一个应用程序,其中包含我用作皮肤的 2 个主题和图片。我可以在代码中为整个活动设置主题。我的问题是我不知道如何正确分离图片时的皮肤。例如,我有两个主题(黑色和白色),并且我有一组特定于这些主题的图片。如何将图片分开,以便我可以从代码中设置皮肤的主题和图像?

4

1 回答 1

2

对不起。我误解了这个问题。我将之前的答案保留在下面,以便评论自然流畅。

在本例中,我们拥有的是 Branding.java 类。此类接受品牌名称(在您的情况下为主题)并生成该主题独有的各种值和字符串。例如,您可以将 Splash 图像命名为 dark_theme_splash.png 和 light_theme_splash.png。加载该可绘制对象时,您调用 Branding.getSplash() 并返回基于当前所选主题的可绘制对象。

public static Drawable getSplash() {
    switch(MYApplication.Theme){
    case LIGHT:
        return MYApplication.res.getDrawable(R.drawable.light_theme_splash);
    }
    return MYApplication.res.getDrawable(R.drawable.dark_theme_splash);
}

在品牌推广中,您将拥有:

public class Branding {

    public static final int LIGHT = 0;
    public static final int DARK = 1;

然后在您的应用程序中,您将有一个 int current_theme 并将其设置为您想要的主题。

*下面是回答了一个实际上没有被问到的问题的旧答案 * 我管理一个有八个不同主题的应用程序。有些截然不同。到目前为止,我为此找到的最佳解决方案分为两部分。

1.) 你的 build.xml。由于您正在构建不同的皮肤应用程序,我想他们的 .apk 会以不同的方式命名。在您的 build.xml 中,利用不同的目标。例如:

   <target name="release-themeone">
        <antcall target="-do-release" inheritAll="false">
         <param name="app.pkg" value="mapmyfitness" />
         <param name="app.pkg.name" value="com.themeone.android2" />
         <param name="launcher.icon" value="common_icon_launcher" />
         <param name=".app.name" value="DarkTheme+" /> />
       </antcall>
    </target>

2.) 这允许您为不同的构建设置不同的参数。在我的例子中,我们有很多不同的drawable,在不同的drawable文件夹中管理它们变得很麻烦。因此,在可绘制文件夹本身中,我们放入了所有常见资源。然后在可绘制文件夹之外创建文件夹,复制可绘制文件夹结构,但包含在主题名称中。例如,文件夹 Themeone 将包含 Drawable、Drawable-hdpi 等。这使我们能够以这样一种方式操作构建系统,即每个特定目标只提取它需要的可绘制对象。

  <copy todir="bin/${app.pkg}/res/drawable" overwrite="true">
    <fileset dir="./brands/${brand.prefix}/drawable"/>  
  </copy>
  <copy todir="bin/${app.pkg}/res/drawable-hdpi" overwrite="true">
    <fileset dir="./brands/${brand.prefix}/drawable-hdpi"/> 
  </copy>
  <copy todir="bin/${app.pkg}/res/drawable-mdpi" overwrite="true">
    <fileset dir="./brands/${brand.prefix}/drawable-mdpi"/> 
  </copy>
  <copy todir="bin/${app.pkg}/res/drawable-xhdpi" overwrite="true">
    <fileset dir="./brands/${brand.prefix}/drawable-xhdpi"/>    
  </copy>

所有这些都包含在 build.xml 中的 for 循环中,该循环遍历了我们拥有的各种构建目标。

希望有帮助。

于 2012-06-28T15:48:34.613 回答