首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有办法在android中管理皮肤?

有没有办法在android中管理皮肤?
EN

Stack Overflow用户
提问于 2012-06-28 22:41:47
回答 1查看 175关注 0票数 0

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-28 23:48:35

抱歉的。我误解了这个问题。我将之前的答案保留在下面,这样评论就有了自然的流畅性。

在本例中,我们拥有的是一个Branding.java类。这个类接受一个品牌名(在您的例子中是主题),并生成该主题所独有的各种值和字符串。例如,您可以将启动映像命名为dark_theme_splash.png和light_theme_splash.png。加载该可绘制文件时,调用Branding.getSplash(),它将根据当前选定的主题返回一个可绘制文件。

代码语言:javascript
运行
复制
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);
}

在品牌推广中,你会有:

代码语言:javascript
运行
复制
public class Branding {

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

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

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

1.)你的build.xml。由于您构建的是不同的皮肤应用程序,我想它们的.apk的名称也会有所不同。在你的build.xml中,利用不同的目标。例如:

代码语言:javascript
运行
复制
   <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.)这允许您为不同的构建设置不同的参数。在我的例子中,我们有这么多不同的可绘制文件,在不同的可绘制文件文件夹中管理它们变得很麻烦。因此,在可绘制文件夹本身中,我们放入了所有公共资产。然后在复制可绘制文件夹结构的drawables外部创建文件夹,但包含在主题名称中。例如,文件夹Themeone将包含Drawable、Drawable-hdpi等。这允许我们以这样的方式操作构建系统,即每个特定的目标只拉出它需要的可绘制的内容。

代码语言:javascript
运行
复制
  <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循环中,该循环遍历我们拥有的各种构建目标。

希望这能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11247113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档