锁定老帖子 主题:Android 皮肤apk实现换肤
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-10-18
最后修改:2011-10-18
没有安装顺序,先安装皮肤后安装主程序完全可以。 安装成功之后在程序里面找不皮肤1/2/3启动文件,因为皮肤只能在主程序中使用。在卸载里面能看到安装上的皮肤,可以卸载掉。 好了来看下主要代码: package com.iaiai; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import android.app.Activity; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager.NameNotFoundException; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup.LayoutParams; import android.widget.Button; import android.widget.LinearLayout; /** * * <p> * Title: MainActivity.java * </p> * <p> * E-Mail: 176291935@qq.com * </p> * <p> * QQ: 176291935 * </p> * <p> * Http: iaiai.iteye.com * </p> * <p> * Create time: 2011-10-18 * </p> * * @author 丸子 * @version 0.0.1 */ public class MainActivity extends Activity { 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; } private boolean isSkinPackage(String packageName) { String rex = "com.iaiai\\w"; Pattern pattern = Pattern.compile(rex); Matcher matcher = pattern.matcher(packageName); return matcher.find(); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final LinearLayout layout = (LinearLayout) findViewById(R.id.layout); ((Button) findViewById(R.id.def)) .setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { layout.setBackgroundDrawable(getResources() .getDrawable(R.drawable.bg)); } }); ArrayList<PackageInfo> skinList = getAllSkin(); for (int i = 0; i < skinList.size(); i++) { try { final Context friendContext = 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(friendContext.getText(R.string.app_name)); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { layout.setBackgroundDrawable(friendContext .getResources().getDrawable(R.drawable.bg)); } }); layout.addView(btn); } catch (NameNotFoundException e) { e.printStackTrace(); } } } } 其它请下载附件查看。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-10-18
这个换肤是换整个手机系统的皮肤么?
|
|
返回顶楼 | |
发表时间:2011-10-19
.勤仔. 写道 这个换肤是换整个手机系统的皮肤么? 哦,这个不是,是软件换肤,就跟QQ那种独立apk换肤... |
|
返回顶楼 | |
发表时间:2011-10-19
iaiai 写道 .勤仔. 写道 这个换肤是换整个手机系统的皮肤么?
哦,这个不是,是软件换肤,就跟QQ那种独立apk换肤... 明白,谢啦! |
|
返回顶楼 | |
发表时间:2011-10-20
不错不错,正需要这个!
|
|
返回顶楼 | |
发表时间:2011-10-20
代码逻辑还算比较简单吧!
不过想法和做法还是值得鼓励的! |
|
返回顶楼 | |
发表时间:2011-10-21
不错呀,学习了。谢谢
|
|
返回顶楼 | |
发表时间:2011-10-21
发现这个比较简单,皮肤包里面没有代码,都是资源文件,我想问可不可以从皮肤包里面获取布局到程序当中?
|
|
返回顶楼 | |
发表时间:2011-10-21
zyl小星星 写道 发现这个比较简单,皮肤包里面没有代码,都是资源文件,我想问可不可以从皮肤包里面获取布局到程序当中?
这个我没试过,你可以自己试一下 |
|
返回顶楼 | |
发表时间:2011-10-21
iaiai 写道 zyl小星星 写道 发现这个比较简单,皮肤包里面没有代码,都是资源文件,我想问可不可以从皮肤包里面获取布局到程序当中?
这个我没试过,你可以自己试一下 通过遍历安装包的方式获取皮肤效率是不是有点低啊,而且,如果某个程序的包名恰好和你的皮肤包名类似,也匹配成功,不是会出错么?有没有其他方式得到自己做的皮肤安装包并被主程序调用呢? |
|
返回顶楼 | |