Android进阶2之APK方式换肤


- public class MainActivity extends Activity
 - {
 - private Button defaultbutton = null;
 - @Override
 - public void onCreate(Bundle savedInstanceState)
 - {
 - super.onCreate(savedInstanceState);
 - setContentView(R.layout.main);
 - final LinearLayout layout = (LinearLayout) findViewById(R.id.layout);
 - //默认皮肤
 - defaultbutton = (Button)findViewById(R.id.defaultButton);
 - defaultbutton.setOnClickListener(new OnClickListener() {
 - @Override
 - public void onClick(View v)
 - {
 - layout.setBackgroundResource(R.drawable.netskin);
 - }
 - });
 - //为其他皮肤添加点击按钮
 - ArrayList<PackageInfo> skinList = getAllSkin();
 - for (int i = 0; i < skinList.size(); i++)
 - {
 - try
 - {
 - final Context context = createPackageContext(skinList.get(i).packageName,
 - Context.CONTEXT_IGNORE_SECURITY);
 - Button btn = new Button(this);
 - btn.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
 - btn.setText(context.getText(R.string.app_name));
 - btn.setOnClickListener(new OnClickListener() {
 - @Override
 - public void onClick(View v)
 - {
 - layout.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.netskin));
 - }
 - });
 - layout.addView(btn);
 - }
 - catch (NameNotFoundException e)
 - {
 - e.printStackTrace();
 - }
 - }
 - }
 - /**
 - * 获取所有已安装的皮肤主题
 - *
 - * @return
 - */
 - private ArrayList<PackageInfo> getAllSkin()
 - {
 - ArrayList<PackageInfo> skinList = new ArrayList<PackageInfo>();
 - List<PackageInfo> packs = getPackageManager().getInstalledPackages(0);
 - for (PackageInfo p : packs)
 - {
 - if (isSkinPackage(p.packageName))
 - {
 - skinList.add(p);
 - }
 - }
 - return skinList;
 - }
 - /**
 - * 判断是否是皮肤主题
 - *
 - * @param packageName
 - * @return
 - */
 - private boolean isSkinPackage(String packageName)
 - {
 - // 自己制作的皮肤主题包名 例如:sunlight.skin0 sunlight.skin1等等
 - String rex = "sunlight.skin\\w";
 - Pattern pattern = Pattern.compile(rex);
 - Matcher matcher = pattern.matcher(packageName);
 - return matcher.find();
 - }
 - }
 
main.xml
- <?xml version="1.0" encoding="utf-8"?>
 - <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 - android:id="@+id/layout"
 - android:layout_width="fill_parent"
 - android:layout_height="fill_parent"
 - android:orientation="vertical" >
 - <Button
 - android:id="@+id/defaultButton"
 - android:layout_width="fill_parent"
 - android:layout_height="wrap_content"
 - android:text="默认皮肤" />
 - </LinearLayout>
 
Android进阶2之APK方式换肤的更多相关文章
- Android APK方式换肤实现原理
		
现在很多APP都有换肤的功能,例如微博,QQ等应用.这些应用的换肤原理是什么? 在用微博的时候,不难发现,当你要换肤时,先下载并安装一个皮肤apk,然后选择这个皮肤,就可以了. 这种方式就是把皮肤打包 ...
 - Android实现apk插件方式换肤
		
换肤思路: 1.什么时候换肤? xml加载前换肤,如果xml加载后换肤,用户将会看见换肤之前的色彩,用户体验不好. 2.皮肤是什么? 皮肤就是apk,是一个资源包,包含了颜色.图片等. 3.什么样的控 ...
 - Android中插件开发篇之----应用换肤原理解析
		
一.前言 今天又到周末了,感觉时间过的很快呀.又要写blog了.那么今天就来看看应用的换肤原理解析.在之前的一篇博客中我说道了Android中的插件开发篇的基础:类加载器的相关知识.没看过的同学可以转 ...
 - Android QMUI实战:实现APP换肤功能,并自动适配手机深色模式
		
Android换肤功能已不是什么新鲜事了,市面上有很多第三方的换肤库和实现方案. 之所以选择腾讯的QMUI库来演示APP的换肤功能,主要原因: 1.换肤功能的实现过程较简单.容易理解: 2.能轻松适配 ...
 - Android 换肤功能的实现(Apk插件方式)
		
一.概述 由于Android 没有提供一套统一的换肤机制,我猜可能是因为国外更注重功能和体验的原因 所以国内如果要做一个漂亮的换肤方案,需要自己去实现. 目前换肤的方法大概有三种方案: (1)把皮肤资 ...
 - Android 打造自己的个性化应用(一):应用程序换肤主流方式的分析与概述
		
Android平台api没有特意为换肤提供一套简便的机制,这可能是外国的软件更注重功能和易用,不流行换肤.系统不提供直接支持,只能自行研究. 换肤,可以认为是动态替换资源(文字.颜色.字体大小.图片. ...
 - Android App插件式换肤实现方案
		
背景 目前很多app都具有换肤功能,用户可以根据需要切换不同的皮肤,为使我们的App支持换肤功能,给用户提供更好的体验,在这里对换肤原理进行研究总结,并选择一个合适的换肤解决方案. 换肤介绍 App换 ...
 - Android动态换肤(二、apk免安装插件方式)
		
在上一篇文章Android动态换肤(一.应用内置多套皮肤)中,我们了解到,动态换肤无非就是调用view的setBackgroundResource(R.drawable.id)等方法设置控件的背景或者 ...
 - Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)
		
Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码) 来源 https://blog.csdn.net/jiangwei0910410003/article/details/51 ...
 
随机推荐
- duilib combo控件,当鼠标滚动时下拉列表自动关闭的bug的修复
			
转载请说明出处,谢谢~~ 群里有朋友提到了使用Combo控件时,当下拉列表出现,此时鼠标滚轮滚动,下拉列表就自动消失了.我看了一下源码,这个bug的修复很简单. CComboUI控件被单击时创建CCo ...
 - NGUI学习笔记-UISprite
			
所有的Sprite使用前,得先准备个图集,然后选择里面的图片进行填充 UISprite里面有几个属性做个笔记: Type: Smple:除了显示内容从图集里面获取外,其他都和Texture一样的绘制 ...
 - 线性模型(3):Logistic Regression
			
此笔记源于台湾大学林轩田老师<机器学习基石><机器学习技法> (一)Logistic Regression 原理 对于分类问题,假设我们想得到的结果不是(x属于某一类)这种形式 ...
 - Window下开发React-Native Android步骤
			
1.安装Android开发环境 下载并安装JDK 下载并安装Android SDK, Android NDK 启动SDK下面的SDK Manager.exe,安装相关SDK Platform-tool ...
 - 【转】Maven实战(六)--- dependencies与dependencyManagement的区别
			
原博文出自于:http://blog.csdn.net/liutengteng130/article/details/46991829 感谢! 在上一个项目中遇到一些jar包冲突的问题,之后还有很 ...
 - 软件工程个人作业——Agile Software Development读后感
			
昨天利用了半天的时间看了下老师给的网页下的8篇文章和一段宣言,将感悟整理为下面的一篇博客. 首先先介绍一下这个网页.记得我们上学期上过一门课叫做面向对象建模方法,在这门课上刘超老师极力推荐的一本教材— ...
 - jQuery基础学习6——基本选择器
			
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
 - oracle 11g 之 result cache
			
oracle 11g 之 result cache 今天是2013-10-12,打算最近时间研究一下shared pool的相关原理以及awr报告分析.今天学习一下在oracle 11g shared ...
 - django控制admin的model显示列表
			
class goods(models.Model): name = models.CharField(max_length=300) price = models.IntegerField ...
 - 神经网络学习-问题(二)-scipy未正确安装报DLL找不到的问题
			
问题如下: E:\project\DL\python\keras>python keras_sample.pyUsing Theano backend.Traceback (most recen ...