运行效果:
没有安装顺序,先安装皮肤后安装主程序完全可以。
安装成功之后在程序里面找不皮肤1/2/3启动文件,因为皮肤只能在主程序中使用。在卸载里面能看到安装上的皮肤,可以卸载掉。
好了来看下主要代码:
Java代码
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();
}
}
}
}
其它请下载附件查看。
- 大小: 38.1 KB
- 大小: 41.9 KB
- 大小: 35.3 KB
- 大小: 34.4 KB
- 大小: 38.5 KB
分享到:
相关推荐
- 使用AssetManager加载皮肤APK的资源,并替换当前应用的资源。 - 通过反射或接口调用来实现类的跨APK调用。 7. **优化与最佳实践**: - 考虑使用插件化框架,如DynamicApk、SplitCompat等,它们已经解决了许多...
本文将深入探讨如何通过APK方式实现Android应用程序的换肤功能,主要涉及的主题包括皮肤资源的管理、动态加载以及换肤过程中的注意事项。 首先,我们需要理解Android应用的皮肤是如何工作的。皮肤通常是一组定制的...
总结起来,"APK方式换肤"是通过构建独立的皮肤APK,动态加载和替换应用资源来实现的。在实际开发中,需关注资源管理、动态加载机制、兼容性问题、安全性和用户体验等多个方面,以实现高效且安全的换肤功能。文件名称...
apk方式实现android应用程序换肤。 文章:http://blog.csdn.net/hailushijie/article/details/9454679
Android皮肤支持:一种Android换肤框架,极低的学习成本,极好的用户体验。 只需要一行代码,就可以实现换肤,你值得拥有!!! SkinCompatManager . withoutActivity( this ) . loadSkin(); 就这么简单,你的APK已经...
在Android应用开发中,实现apk皮肤文件换肤是一项常见的需求,它可以提高用户的个性化体验,同时降低主程序的维护复杂度。以下是对实现这一功能的详细分析: 首先,我们需要理解Android系统的安全机制。每个APK在...
2. **插件化框架**:使用插件化框架(如DexClassLoader或 DexDrip)加载皮肤APK中的资源,这样可以避免直接修改主应用的代码。 3. **资源ID映射**:由于不同的皮肤可能会有不同ID的资源,因此需要建立一个映射表,...
本文将深入探讨“Android插件换肤完整版”这一主题,包括其核心概念、实现机制以及相关技术。 首先,Android换肤主要涉及两部分:皮肤资源和动态加载。皮肤资源通常包含颜色、图片、布局等界面元素,它们存储在单独...
"android换肤实现"这个主题涉及到了如何让应用程序可以根据用户的选择切换不同的界面风格,类似于流行的Go桌面应用。这种技术允许用户根据个人喜好调整应用的外观,增强其交互性和视觉吸引力。 在Android中实现换肤...
以下将详细讲解如何在Android APK中实现换肤功能。 首先,换肤的核心在于资源管理。Android应用的外观主要由XML资源文件定义,包括颜色、样式、布局等。换肤时,通常会创建多套这样的资源文件,每套对应一种皮肤。...
"Android换肤免安装Demo"就是一种实现动态换肤的技术方案,它允许用户在不安装额外apk的情况下,通过加载未安装的资源来改变应用的主题和外观。这种技术的核心在于动态资源加载和分离皮肤与应用主体的逻辑,使得皮肤...
在Android应用开发中,"动态加载本地皮肤包进行换肤"是一种提高用户体验和个性化定制的常见技术。通过插件化开发,我们可以实现不更新主应用就能更换应用界面皮肤的效果,从而满足用户对不同主题和风格的需求。以下...
【Android插件换肤Demo】是一个演示如何在Android应用程序中实现动态皮肤更换功能的示例。这个Demo展示了如何通过插件化技术来实现在运行时切换应用的视觉样式,为用户提供个性化的体验。尽管这个Demo可能并不直接...
确保用户在安装皮肤Apk时授予了必要的权限,如读取存储权限,以访问Apk文件。 3. **动态加载插件**:当用户选择一个新的皮肤时,需要动态加载对应的Apk。这可以通过`PackageManager`服务完成,获取Apk的`...
3. 使用第三方库:如SkinCompat、Apk更换皮肤框架等,这些库提供了方便的接口和工具,简化了换肤的实现过程。 三、换肤流程 1. 用户选择主题:在设置界面提供预设主题供用户选择,或者允许用户自定义颜色。 2. ...
4. **插件化技术**:为了实现动态换肤,可能需要用到Android的插件化技术,如DexClassLoader或 DexOpener,它们可以加载非主APK中的类和资源,使得皮肤APK能够独立于主应用运行。 5. **线程安全与性能优化**:考虑...
Android-Skin:极简单的android换肤框架,无缝支持第三方控件,一行代码即可换肤,集成成本极低, 提供丰富的API支持拓展,对业务代码几乎无入侵。 AndroidSkin.getInstance().saveSkinAndApply(skinFilePath, ...
本文将深入探讨如何实现这个功能,主要基于标题"Android动态换肤"和描述中的关键点:通过宿主工程加载插件apk中的图片,使用反射和类加载器。 首先,我们要理解动态换肤的基本原理。传统的换肤方式通常需要用户下载...
"插件化换肤change_skin.rar" 文件提供了一种实现Android应用程序动态换肤的技术方案,包括原生应用、皮肤包以及换肤库这三个核心模块。以下是关于这个主题的详细解释: 1. **原生应用(Original App)**:这是应用...
"插件apk换肤代码"这个主题主要涉及到动态加载外部皮肤包的技术,它允许用户自由更换应用的主题色或者界面风格,而无需重新安装整个应用。下面将详细介绍这个过程涉及的关键知识点。 1. **AndroidManifest.xml配置*...