博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android进阶2之APK方式换肤
阅读量:6612 次
发布时间:2019-06-24

本文共 2175 字,大约阅读时间需要 7 分钟。

  1. public class MainActivity extends Activity  
  2. {  
  3.     private Button defaultbutton = null;  
  4.     @Override  
  5.     public void onCreate(Bundle savedInstanceState)  
  6.     {  
  7.         super.onCreate(savedInstanceState);  
  8.         setContentView(R.layout.main);  
  9.         final LinearLayout layout = (LinearLayout) findViewById(R.id.layout);  
  10.         //默认皮肤  
  11.         defaultbutton = (Button)findViewById(R.id.defaultButton);  
  12.         defaultbutton.setOnClickListener(new OnClickListener() {  
  13.             @Override  
  14.             public void onClick(View v)  
  15.             {  
  16.                 layout.setBackgroundResource(R.drawable.netskin);  
  17.             }  
  18.         });  
  19.         //为其他皮肤添加点击按钮  
  20.         ArrayList<PackageInfo> skinList = getAllSkin();  
  21.         for (int i = 0; i < skinList.size(); i++)  
  22.         {  
  23.             try  
  24.             {  
  25.                 final Context context = createPackageContext(skinList.get(i).packageName,  
  26.                         Context.CONTEXT_IGNORE_SECURITY);  
  27.                 Button btn = new Button(this);  
  28.                 btn.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));  
  29.                 btn.setText(context.getText(R.string.app_name));  
  30.                 btn.setOnClickListener(new OnClickListener() {  
  31.                     @Override  
  32.                     public void onClick(View v)  
  33.                     {  
  34.                         layout.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.netskin));  
  35.                     }  
  36.                 });  
  37.                 layout.addView(btn);  
  38.             }  
  39.             catch (NameNotFoundException e)  
  40.             {  
  41.                 e.printStackTrace();  
  42.             }  
  43.         }  
  44.     }  
  45.   
  46.     /** 
  47.      * 获取所有已安装的皮肤主题 
  48.      *  
  49.      * @return 
  50.      */  
  51.     private ArrayList<PackageInfo> getAllSkin()  
  52.     {  
  53.         ArrayList<PackageInfo> skinList = new ArrayList<PackageInfo>();  
  54.         List<PackageInfo> packs = getPackageManager().getInstalledPackages(0);  
  55.         for (PackageInfo p : packs)  
  56.         {  
  57.             if (isSkinPackage(p.packageName))  
  58.             {  
  59.                 skinList.add(p);  
  60.             }  
  61.         }  
  62.         return skinList;  
  63.     }  
  64.   
  65.     /** 
  66.      * 判断是否是皮肤主题 
  67.      *  
  68.      * @param packageName 
  69.      * @return 
  70.      */  
  71.     private boolean isSkinPackage(String packageName)  
  72.     {  
  73.         // 自己制作的皮肤主题包名 例如:sunlight.skin0 sunlight.skin1等等  
  74.         String rex = "sunlight.skin\\w";  
  75.         Pattern pattern = Pattern.compile(rex);  
  76.         Matcher matcher = pattern.matcher(packageName);  
  77.         return matcher.find();  
  78.     }  
  79. }  

main.xml

    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:id="@+id/layout"  
    4.     android:layout_width="fill_parent"  
    5.     android:layout_height="fill_parent"  
    6.     android:orientation="vertical" >  
    7.   
    8.     <Button  
    9.         android:id="@+id/defaultButton"  
    10.         android:layout_width="fill_parent"  
    11.         android:layout_height="wrap_content"  
    12.         android:text="默认皮肤" />  
    13.   
    14. </LinearLayout>

转载地址:http://jexso.baihongyu.com/

你可能感兴趣的文章
Webstrom快捷键大全
查看>>
python 基础 1.5 python数据类型(三)--元组常用方法示例
查看>>
HTML笔记06--浮动第一章
查看>>
使用Perl5获取有道词典释义
查看>>
Python开发环境搭建for Windows
查看>>
CentOS 7安装与配置Tomcat8
查看>>
Bootstrap两端对齐的导航实例
查看>>
POJ 3250 Bad Hair Day
查看>>
jpa的分页实现
查看>>
请定义一个交通工具(Vehicle)的类,其中有: 属性:速度(speed),体积(size)等等
查看>>
垃圾收集器与内存分配策略(一)
查看>>
20175311 2018-2019-2 《Java程序设计》第四周学习总结
查看>>
腾讯云CVM之间配置免密钥登录
查看>>
HTML元素1: 基本元素,标题,段落,链接,图像等
查看>>
MyBatis原理
查看>>
599. Minimum Index Sum of Two Lists(easy)
查看>>
文件的打开和关闭
查看>>
css_文本溢出
查看>>
BOM,Dom 回顾
查看>>
TFS简介
查看>>