Android实现类似微博的换肤功能

booooo­ 2012-12-10 02:34:48
现在想做一个和新浪微博客户端一样的更换主题样式的功能,从网上搜了很多,多数都是说使用SharedUserid来控制,但是我不清楚,到底怎么使用,在主程序中如何来实现具体的更换操作;

其实我就是想要个这样的功能:
主程序一次性写好,默认自带有一套主题皮肤样式,之后的只需要像微博那样,下载新的皮肤apk安装即可更换;
即使客户端已经安装了很多个apk,主程序也照样在不变的情况下来回切换不同的皮肤风格;

请问大家,这样的一种功能,该怎么实现?
最好说说具体的思路,或者给个线程的Demo看看也行。
先谢谢各位了
...全文
384 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
life02 2012-12-11
  • 打赏
  • 举报
回复
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);
qinjuning 2012-12-11
  • 打赏
  • 举报
回复
第二个问题,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
booooo­ 2012-12-11
  • 打赏
  • 举报
回复
好吧,不再追究这个问题。 换个新问题吧: 如何在类里得到style.xml文件中已定义的各个元素,然后进行动态修改?
booooo­ 2012-12-11
  • 打赏
  • 举报
回复
恩,谢谢。 你说的解决办法,其实我有更简单的方法,但是这种方法我感觉比较狭隘,因为动态设置控件样式,首先得满足一个必要的条件,那就是必须在代码中实例化这个控件的对象才能完成对应的操作; 但是,对于某些比较复杂的布局,里面有很多的控件,但并不是所有控件都需要在类中实例化的,而如果这样做了,整个类的代码看起来就会很凌乱,不易于维护操作。 因此,我想找个既易于维护,还能够适配于各种布局的方式,而动态的改变style.xml文件的内容定义是我想到的最直接也最简单的方式; 不知道你和大家还有没有更好的方式,欢迎交流学习
引用 5 楼 qinjuning 的回复:
第二个问题,Android只提供了get 一个 Attr的方法,没有set对应方法。如果你要动态修改,只能利用xml解析(可以参考org.xml.sax.helpers.AttributesImpl类),或者是文件操作(相对于第一个更难) ; 第一个问题,我之前看到过一个类似项目,是如下做的: 1、获得每个皮肤包(XXX.apk)的packageName……
booooo­ 2012-12-11
  • 打赏
  • 举报
回复
你好,能说明白点么? 你说的那个ADW Launcher是个桌面管理软件吧,那怎么看它的实现呢? 我看你写的代码貌似很简单的样子,能给发个Demo学习下么,感激不尽。
引用 6 楼 life02 的回复:
Lz 下一个adw launcher下来看看,里面就有主题切换的功能,也就是相当于你的换肤功能。 无非是: String themePackage=AlmostNexusSettingsHelper.getThemePackageName(this, THEME_DEFAULT); PackageManager pm=getPackageManager()……
KPRF2009 2012-12-10
  • 打赏
  • 举报
回复
换皮肤就是换图片。。。 你在数据库中存下当前选择的是什么皮肤,加载对应的图片就可以了。。。 没写过,应该是这样的。。。
wlcw16 2012-12-10
  • 打赏
  • 举报
回复
问题很偏。我一般做都是换背景图片。。。
booooo­ 2012-12-10
  • 打赏
  • 举报
回复
这问题难道就没人知道么,难道很难啊

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧