- 浏览: 409384 次
- 性别:
- 来自: 福州
最新评论
-
野牛精:
感谢楼主分享,帮大忙了。
android ftp 客户端编写(ftp4j) -
happytianqiu:
你好,我最近也在搞这个,能发个demo吗,邮箱是:624951 ...
开发android机顶盒应用 事件,焦点处理 -
zhunanfengfeimeng:
http://www.iteye.comhttp://www. ...
android ftp 客户端编写(ftp4j) -
icyttea:
好棒!感谢楼主分享
vlc for android录制视频与截图 -
clwwlc:
有demo吗
开发android机顶盒应用 事件,焦点处理
上次说到csipsimple里面使用皮肤的方式,是一个receiver来接收,然后setresultdata返回 数据的。
由于它是在onresume中才调用 主题的,所以会有一段时间先看到一些旧的资源,然后才刷新界面,这样的好处是选择了不同的主题马上会看到结果。显然也有不好一面了。就是每次onresume都会调用一次。
总得来说,主题变换都是通过 getThemePackageName,得到主题apk的包名。
Resources themeResources = null;
themeResources = pm.getResourcesForApplication(themePackage);
然后得到资源。
int resourceID = themeResources.getIdentifier(resourceName, "color", themePackage);
if (resourceID != 0) {
view.setTextColor(themeResources.getColor(resourceID));
}
最后应用。
把应用主题放在oncreate里面,就更适合了,只不过不是每次选择了主题就会马上看到效果,需要重启这个activity或fragment。
上面这段是apollo的应用 方式。
private void initActionBar():
ThemeUtils.setTextColor(this, actionBarTitle, "action_bar_title_color");
ThemeUtils.initThemeChooser(this, actionBarUp, "action_bar_up", THEME_ITEM_BACKGROUND);
apollo是cm团队制作的音乐播放器,(据代码来看是根据google原来的music源码修改来的,使用上了fragment,viewpager,actionbar),当然它只能在v14以上的系统使用,效果不错。(其实我已经修改了部分,现在运行在2.3.3上 了,actionbar的功能还没有修改完成。还有popmenu)
从csipsimple,apollo的主题应用来看,都不会是创建一个Context对象,原因我想大概是Context容易造成内存的泄露,所以它使用了全局的对象。使用pm.getResourcesForApplication这样的方式来查找对应的资源文件。有听说这个方法稍微慢一些。因为getIdentifier速度的问题,很显然的,根据名字查询当然比不上根据id查询了(文档里这么说地 )
下面传几张图来看看效果。分别是默认的light效果与orange皮肤的效果(网上下载 的。)
还有两张是2.3.3系统的效果(修改了apollo的源码,ActionBar明显还没有处理,准备使用的是sdk里面的 actionbarcompat,因为原来的源码不多,所以不引入重量级的组件abs了。况且2.3.x迟早要被4.x替代的。)
源码在:https://github.com/CyanogenMod/android_packages_apps_Apollo.git
我下载的是branch apollo_jellybean这个比master更新,应该是针对jellybean的,我猜迟早是要放入master主分支中的。
如果想学皮肤制作的可以参考下。不错的示例,
由于它是在onresume中才调用 主题的,所以会有一段时间先看到一些旧的资源,然后才刷新界面,这样的好处是选择了不同的主题马上会看到结果。显然也有不好一面了。就是每次onresume都会调用一次。
总得来说,主题变换都是通过 getThemePackageName,得到主题apk的包名。
Resources themeResources = null;
themeResources = pm.getResourcesForApplication(themePackage);
然后得到资源。
int resourceID = themeResources.getIdentifier(resourceName, "color", themePackage);
if (resourceID != 0) {
view.setTextColor(themeResources.getColor(resourceID));
}
最后应用。
把应用主题放在oncreate里面,就更适合了,只不过不是每次选择了主题就会马上看到效果,需要重启这个activity或fragment。
上面这段是apollo的应用 方式。
private void initActionBar():
ThemeUtils.setTextColor(this, actionBarTitle, "action_bar_title_color");
ThemeUtils.initThemeChooser(this, actionBarUp, "action_bar_up", THEME_ITEM_BACKGROUND);
apollo是cm团队制作的音乐播放器,(据代码来看是根据google原来的music源码修改来的,使用上了fragment,viewpager,actionbar),当然它只能在v14以上的系统使用,效果不错。(其实我已经修改了部分,现在运行在2.3.3上 了,actionbar的功能还没有修改完成。还有popmenu)
从csipsimple,apollo的主题应用来看,都不会是创建一个Context对象,原因我想大概是Context容易造成内存的泄露,所以它使用了全局的对象。使用pm.getResourcesForApplication这样的方式来查找对应的资源文件。有听说这个方法稍微慢一些。因为getIdentifier速度的问题,很显然的,根据名字查询当然比不上根据id查询了(文档里这么说地 )
下面传几张图来看看效果。分别是默认的light效果与orange皮肤的效果(网上下载 的。)
还有两张是2.3.3系统的效果(修改了apollo的源码,ActionBar明显还没有处理,准备使用的是sdk里面的 actionbarcompat,因为原来的源码不多,所以不引入重量级的组件abs了。况且2.3.x迟早要被4.x替代的。)
源码在:https://github.com/CyanogenMod/android_packages_apps_Apollo.git
我下载的是branch apollo_jellybean这个比master更新,应该是针对jellybean的,我猜迟早是要放入master主分支中的。
如果想学皮肤制作的可以参考下。不错的示例,
说了半天,还没有说这次的重点。 上次csipimple使用一个接收器来接收广播,这次apollo不是,但原理相同,只要找得到包就可以了,皮肤没有源码,直接反编译了,里面没有java代码(annotation我觉得不算是) manifest文件也简单。 <manifest android:versionCode="2" android:versionName="1.1" package="com.lehoang.orangetheme" xmlns:android="http://schemas.android.com/apk/res/android"> <uses-sdk android:minSdkVersion="7" /> <application android:label="@string/themeTitle" android:icon="@drawable/ic_launcher"> <activity android:label="@string/themeTitle" android:name="com.lehoang.orangetheme.GoogleMusicThemeActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <action android:name="com.andrew.apollo.THEMES" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </application> </manifest> 关键在于com.andrew.apollo.THEMES这个, 而com.lehoang.orangetheme.GoogleMusicThemeActivity这段无关紧要的,其实没有这个Activity的java代码。 查找: Intent intent = new Intent("com.andrew.apollo.THEMES"); intent.addCategory("android.intent.category.DEFAULT"); PackageManager pm = getPackageManager(); List<ResolveInfo> themes = pm.queryIntentActivities(intent, 0); String[] entries = new String[themes.size() + 1]; String[] values = new String[themes.size() + 1]; entries[0] = APOLLO; values[0] = APOLLO; for (int i = 0; i < themes.size(); i++) { String appPackageName = (themes.get(i)).activityInfo.packageName.toString(); String themeName = (themes.get(i)).loadLabel(pm).toString(); entries[i + 1] = themeName; values[i + 1] = appPackageName; } themeLp.setEntries(entries); themeLp.setEntryValues(values); ThemePreview themePreview = (ThemePreview)findPreference(THEME_PREVIEW); themePreview.setTheme(themePackage); 可见android.intent.action.MAIN这个用处没有体现 。 这里使用了queryIntentActivities来查找对应的Activity,与查找receiver一样。结果是查找到这个包名,和主题包。 android:name="com.lehoang.orangetheme.GoogleMusicThemeActivity" 这个似乎就没有用到了,不过最好与包名一样,起个与众不同的就可以了。 主题选择后的应用: public void applyTheme(View v) { ThemePreview themePreview = (ThemePreview)findPreference(THEME_PREVIEW); String packageName = themePreview.getValue().toString(); ThemeUtils.setThemePackageName(this, packageName); Intent intent = new Intent(); intent.setClass(this, MusicLibrary.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); finish(); } 如果选择了主题但没有应用,是看不到地,而这两个程序的普遍做法是将主题对应的包名等信息放在sp中,然后在程序启动时就可以直接读取了。 想要皮肤效果立刻见效,只有重启Activity了。如果一个程序的主页比较重要,而应用 主题不改变当前的程序中的内容,这种方法就不太可行了。它直接启动一个新的。 每一个皮肤的制作都遵循一定的规则的,规则当然由主程序定了,当主程序变换时,皮肤如果不变,有可能得不到对应的资源,所以可以读取皮肤的版本号,版本名称或其它的一些信息来判断皮肤是否对应当前的主程序。 另外说下apollo在ui设计方面可以学习的地方: popmenu,这个是v11后的东西,前面的系统就免试了。这是在bottombar中右侧竖线点击后的弹出的效果。 以前一直想弄一个上面使用tabs,然后再加入一些navigation_list mode这样可以下拉的spinner,而apollo直接把actionbar隐藏了,自己弄了一个scrollingtab,跟ActionBar的tabs是一样的效果。(我的思想被束缚了,一直想是否系统有现成的这样控件)。 对于底部的bottombar同样是使用了一个viewpager,我一直以为。像viewpager这样的东西算是重量级的控件了,通常用在大块区域,没想到,放到底部这样小块的地方,也是相当不错的效果。 列表中的spinner的效果(三角形的右下角)这也算是v14引入的吧。现在越来越多的程序会有这样的控件背景按钮了。 专辑中的列表项(要有封面背景才看得出效果),下面文字半透明的,加上背景,效果不错。 截图会有些图不正常,但程序没有问题,是ddms的截图的问题。 600k左右的代码,把一个音乐播放器弄成这样,还有自动搜索封面等 信息(google搜索的估计,使用了一个包,可能多数音乐搜索结果不能让人满意,所以我自己修改时去了。),有好多东西值得去学习的。 顺便说一下,如果你想自己修改源码,需要注意MediaPlayer.setNextMediaPlayer这个在之前的版本是没有的,所以在oncompletelistener里面需要加入一个mCurrentPlayer.start()启动播放,不然只有单曲的了。放完了,不会自动下一首。 audioeffect在2.1版本也没有,但2.3,还是可以看到效果的 最后感谢cm团队。 下载了几个主题然后,重新打包,现在可以用于2.x的系统了。 除了优点外,apollo还有一个缺点,就是一开始就加载了所有的Fragment,当然是浪费了资源了。修改这些,需要改变PagerAdapter的addfragment方式,然后在musiclibrary里面的不是使用new XXFragemnt,而是将Class放进驻,然后通过反射在PagerAdapter里面使用,获取实例。 最后将所有apk打包发布,比较大,是因为加了vlc的视频播放功能,它还有自动扫描视频,还没有处理,现在还是直接查找媒体库的内容。 以com.开头的是v14以后就是4.x以后的系统皮肤,也是原版的,其它的皮肤是重新打包,适用于2.x系统的。由于本程序主要针对2.x系统,在4。x上直接使用原版就好了。可以用里面的四个主题,皮肤是找了挺久的,只有在play上有下载。 而且取消了专辑封面下载。
- Apollo.zip (9.1 MB)
- 下载次数: 55
发表评论
-
android 批量打渠道包
2014-09-16 17:27 5905打包,是一个经常会遇到的问题,写个脚本就可以解决了.不同的脚本 ... -
vlc for android录制视频与截图
2014-09-08 18:31 8031首先说明,这不算原 ... -
android百度地图转为高德地图
2014-08-11 11:09 2964使用百度地图也不少时间了,但是一直出现无法解决的问题,在官 ... -
编译 i9000的cm系统
2014-08-04 13:10 1596[color=red][b]此文 并不 ... -
mp4v2 保存h264流
2014-05-01 21:15 11827大侠已经完成了很多操作了,唯一不足的是,工程完整性差一些,而且 ... -
baidumap的缩放到看到所有点
2014-04-09 21:03 1464之前使用1.3.5版本的sdk,通过调用mapviewcont ... -
ViewPager 查看图片
2014-02-13 12:59 4525一个图片查看器 , app到处都是 , 但那是别人的. 现在的 ... -
机顶盒 页面 选中后的 动画
2013-12-05 09:39 2184前面已经说过了,对于机顶盒的焦点的处理. 相信有不少人看 ... -
引爆你的图片浏览, ListView 大图片
2013-11-05 07:58 1314之前发现,ListView里面的图片资源越占越大,特别是当 ... -
微博开放源码
2013-10-23 12:09 1035微博程序已经发布不少时间了,但一直也没有很多用户使用,主要在用 ... -
Mupdf 缩小apk包,减少字体
2013-10-20 15:53 3723在以前的apv中,字体占了很大的一部分,如果去除cjk字体 ... -
ActionBar appcompat 解决碎片化问题
2013-09-15 16:58 2178actionbarsherlock 这个在api11以下的系统 ... -
android机顶盒获取有线mac
2013-09-02 16:09 5503直接上代码: public static String ... -
android竖着的seekbar
2013-08-22 20:33 5534以前网上有位虾士发过一篇文章是关于竖着的seekbar,但是也 ... -
新浪微博oauth2.0 自动认证
2013-08-13 09:01 0oauth2.0作者认为它不先进,都放弃了.但是oauth2. ... -
android 颜表情.
2013-07-20 21:16 1858在使用TagsViewGroup 流布局后,我替换了原来的Gr ... -
flow 流布局.
2013-07-13 20:06 1307在git上看到一个FlowingViewGroup,代码有点旧 ... -
开发android机顶盒应用 事件,焦点处理
2013-07-13 19:58 19839机顶盒应用不同于手机 ... -
android 磁盘缓存.
2013-07-13 19:30 5293开发一个app,特别是图片的app,免不了要存储图片,内存缓存 ... -
TextView 文字淡入效果
2013-04-15 13:34 3499一个文本渐渐地从左到右的显示。 几步就可以了实现了。利用的是V ...
相关推荐
在Android操作系统中,主题(Theme)是用户界面的重要组成部分,它定义了应用程序的整体视觉样式,包括颜色、字体、布局和图标的外观等。通过自定义主题,开发者可以为用户提供独特的体验,增强应用的品牌识别度。...
Android Theme界面换肤应用实例,也就是更改系统主题风格,可在“应用透明背景的主题”、“应用布景主题1”、“应用布景主题2”三种皮肤风格之间切换,Android换肤对Android手机来说是再简单不过的功能了,个性化...
- Android中的主题(Theme)也是实现皮肤的一种方式,通过在styles.xml文件中定义不同的主题,然后在AndroidManifest.xml中为Activity或整个应用设置不同的主题。 - 主题可以控制全局的颜色、字体样式等,但不适用...
主题(Theme)是Android系统提供的一种全局样式设定,它可以控制应用程序的整体外观,包括字体颜色、背景色、按钮样式等。皮肤(Skin)则是主题的一个变体,它允许用户根据个人喜好更改应用的视觉风格,而无需改变...
4. **自定义View**:对于更复杂的皮肤应用,可能需要创建自定义View,重写onDraw()方法,或者使用Nine-Patch图片来实现自适应边距和伸缩性。 5. **资源切换**:为了实现皮肤切换功能,可以在应用中设置一个设置页面...
在Android开发中,实现界面皮肤切换的功能可以提升用户体验,让用户根据个人喜好自定义应用的视觉样式。本教程将深入探讨如何在Android应用中实现实时切换界面皮肤的代码技术。 首先,我们需要理解皮肤的基本概念。...
在Android应用开发中,更换皮肤或主题是一种常见的用户定制化功能,可以提升用户体验,让用户根据个人喜好调整应用的视觉风格。本篇文章将深入探讨如何在Android应用中实现皮肤更换,特别是通过skin APK安装来实现这...
2. 应用主题:在AndroidManifest.xml中,将应用或活动的theme属性设为主题资源ID: ```xml android:theme="@style/MyTheme"> ... ``` 三、换肤功能实现 换肤功能通常涉及动态加载不同的主题资源。以下是一种...
在Android应用开发中,皮肤更换方案是一个常见的需求,它允许用户根据个人喜好定制应用的外观。这个主题涉及到多个技术层面,包括资源管理、主题切换、动态加载等方面。下面将详细探讨如何实现Android App的皮肤更换...
总的来说,“android皮肤demo”是一个展示Android应用如何实现换肤功能的实例,它涵盖了主题设置、皮肤包加载以及第三方库的使用等多个方面。通过对这些知识点的理解和实践,开发者可以为用户提供更加个性化和丰富的...
同时,可以在代码中动态设置View的样式,根据用户选择的皮肤应用相应的主题。 5. **图片处理**:QQ皮肤中可能包含背景图片,开发者需要考虑如何高效地加载和显示这些图片。Android提供了多种图片加载库,如Glide、...
5. **主题支持**:全局皮肤更换功能往往与主题系统结合,Android提供了一套完整的主题框架,通过主题风格(Theme)可以统一控制整个应用的界面样式。开发者可以通过自定义主题,覆盖默认样式,实现皮肤更换。 6. **...
在开发移动应用时,主题皮肤的可更换性是提升用户体验的重要功能之一。uniAPP作为一个跨端开发框架,允许开发者用一套代码实现多平台部署,包括iOS、Android、H5等。本文将详细介绍如何在uniAPP中实现主题皮肤的更换...
首先,皮肤在Android中通常指的是主题(Theme)或样式(Style)。它们定义了应用程序的整体视觉效果,包括颜色、字体、布局等。Android系统提供了多种内置主题,开发者也可以自定义主题以满足个性化需求。 1. **...
综上所述,“android换肤demo1”项目涵盖了Android应用开发中关于换肤的多个核心方面,从主题和样式的定义,到动态加载和切换皮肤,再到用户体验和兼容性的考虑,都是开发者需要掌握的重要知识点。通过研究这个示例...
2. **主题和样式**:利用Android的Theme和Style机制,开发者可以定义不同的皮肤主题,通过改变主题达到更换皮肤的效果。 3. **代码逻辑**:需要编写代码来处理皮肤的切换,包括读取皮肤文件、更新UI元素的样式等。 4...
这通常涉及到在`styles.xml`文件中定义一个新的`<style>`元素,如`<style name="AppTheme.Dark">`,并设置其父主题为应用的默认主题,如`parent="@android:style/Theme.Material"`。然后,我们可以在这个新主题中...
本文将详细解析"android应用的换肤demo",介绍如何利用Android的主题样式(style)来实现这一功能,以及如何通过更换主题来改变Activity背景、View属性,如背景色和字体颜色。 首先,理解Android的主题(Theme)和...
Android支持通过设置主题(Theme)改变应用的整体风格。开发者可能创建了自己的主题样式,包含颜色、字体、阴影等属性,并在代码中应用到各个组件上。例如,通过设置style.xml中的标签,可以改变按钮、文本框等元素...