现在想做一个和新浪微博客户端一样的更换主题样式的功能,从网上搜了很多,多数都是说使用SharedUserid来控制,但是我不清楚,到底怎么使用,在主程序中如何来实现具体的更换操作;其实我就是想要个这样的功能:
主程序一次性写好,默认自带有一套主题皮肤样式,之后的只需要像微博那样,下载新的皮肤apk安装即可更换;
即使客户端已经安装了很多个apk,主程序也照样在不变的情况下来回切换不同的皮肤风格;请问大家,这样的一种功能,该怎么实现?
最好说说具体的思路,或者给个线程的Demo看看也行。
先谢谢各位了

解决方案 »

  1.   

    好吧,不再追究这个问题。
    换个新问题吧:如何在类里得到style.xml文件中已定义的各个元素,然后进行动态修改?
      

  2.   

     第二个问题,Android只提供了get 一个 Attr的方法,没有set对应方法。如果你要动态修改,只能利用xml解析(可以参考org.xml.sax.helpers.AttributesImpl类),或者是文件操作(相对于第一个更难) ; 第一个问题,我之前看到过一个类似项目,是如下做的:
       1、获得每个皮肤包(XXX.apk)的packageName ;
       2、使用Resource的 public int getIdentifier (String name, String defType, String defPackage)或得该皮肤包下资源名称的resId , 即可调用view.setXX(resId)了;。
      
      当然得确保资源名是统一的。 可以参考:http://blog.csdn.net/vincent_czz/article/details/7433365
      

  3.   

    Lz 下一个adw launcher下来看看,里面就有主题切换的功能,也就是相当于你的换肤功能。
    无非是:
    String themePackage=AlmostNexusSettingsHelper.getThemePackageName(this, THEME_DEFAULT);
         PackageManager pm=getPackageManager();
         Resources themeResources=null;
         if(!themePackage.equals(THEME_DEFAULT)){
         try {
    themeResources=pm.getResourcesForApplication(themePackage);
    } catch (NameNotFoundException e) {
    //ADW The saved theme was uninstalled so we save the default one
        AlmostNexusSettingsHelper.setThemePackageName(this, Launcher.THEME_DEFAULT);
    }
         }
    if(themeResources!=null){
         //Action Buttons
    loadThemeResource(themeResources,themePackage,"lab_bg",mLAB,THEME_ITEM_BACKGROUND);
      

  4.   

    你好,能说明白点么?
    你说的那个ADW Launcher是个桌面管理软件吧,那怎么看它的实现呢?
    我看你写的代码貌似很简单的样子,能给发个Demo学习下么,感激不尽。
      

  5.   

    恩,谢谢。
    你说的解决办法,其实我有更简单的方法,但是这种方法我感觉比较狭隘,因为动态设置控件样式,首先得满足一个必要的条件,那就是必须在代码中实例化这个控件的对象才能完成对应的操作;
    但是,对于某些比较复杂的布局,里面有很多的控件,但并不是所有控件都需要在类中实例化的,而如果这样做了,整个类的代码看起来就会很凌乱,不易于维护操作。
    因此,我想找个既易于维护,还能够适配于各种布局的方式,而动态的改变style.xml文件的内容定义是我想到的最直接也最简单的方式;
    不知道你和大家还有没有更好的方式,欢迎交流学习