`
iaiai
  • 浏览: 2183512 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android 皮肤apk实现换肤

 
阅读更多
运行效果:






没有安装顺序,先安装皮肤后安装主程序完全可以。
安装成功之后在程序里面找不皮肤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();
			}
		}
	}

}


其它请下载附件查看。
  • 大小: 38.1 KB
  • 大小: 41.9 KB
  • 大小: 35.3 KB
  • 大小: 34.4 KB
  • 大小: 38.5 KB
分享到:
评论
3 楼 winchun323 2012-05-31  
感谢楼主,收了!!!
2 楼 mtain 2011-11-14  
  好 酷
1 楼 mtain 2011-11-14  
不错 的代码 谢了

相关推荐

    apk方式实现android应用程序换肤

    本文将深入探讨如何通过APK方式实现Android应用程序的换肤功能,主要涉及的主题包括皮肤资源的管理、动态加载以及换肤过程中的注意事项。 首先,我们需要理解Android应用的皮肤是如何工作的。皮肤通常是一组定制的...

    APK方式换肤

    总结起来,"APK方式换肤"是通过构建独立的皮肤APK,动态加载和替换应用资源来实现的。在实际开发中,需关注资源管理、动态加载机制、兼容性问题、安全性和用户体验等多个方面,以实现高效且安全的换肤功能。文件名称...

    Android应用开发中实现apk皮肤文件换肤的思路分析

    在Android应用开发中,实现apk皮肤文件换肤是一项常见的需求,它可以提高用户的个性化体验,同时降低主程序的维护复杂度。以下是对实现这一功能的详细分析: 首先,我们需要理解Android系统的安全机制。每个APK在...

    apk方式实现android应用换肤

    apk方式实现android应用程序换肤。 文章:http://blog.csdn.net/hailushijie/article/details/9454679

    android换肤功能简单

    首先,我们来看一下标题中的"android换肤功能简单",这表明我们将讨论的是一个相对简单的Android换肤实现方案。 在描述中提到的博客链接(http://blog.csdn.net/jan_s/article/details/48393003)可能提供了更详细...

    android apk换肤

    以下将详细讲解如何在Android APK中实现换肤功能。 首先,换肤的核心在于资源管理。Android应用的外观主要由XML资源文件定义,包括颜色、样式、布局等。换肤时,通常会创建多套这样的资源文件,每套对应一种皮肤。...

    Android插件换肤完整版

    本文将深入探讨“Android插件换肤完整版”这一主题,包括其核心概念、实现机制以及相关技术。 首先,Android换肤主要涉及两部分:皮肤资源和动态加载。皮肤资源通常包含颜色、图片、布局等界面元素,它们存储在单独...

    android换肤实现

    "android换肤实现"这个主题涉及到了如何让应用程序可以根据用户的选择切换不同的界面风格,类似于流行的Go桌面应用。这种技术允许用户根据个人喜好调整应用的外观,增强其交互性和视觉吸引力。 在Android中实现换肤...

    Android 换肤功能的实现(Apk插件方式)源码

    确保用户在安装皮肤Apk时授予了必要的权限,如读取存储权限,以访问Apk文件。 3. **动态加载插件**:当用户选择一个新的皮肤时,需要动态加载对应的Apk。这可以通过`PackageManager`服务完成,获取Apk的`...

    Android 摇一摇换皮肤

    在Android平台上实现“摇一摇换皮肤”的功能,涉及到多个技术点,包括传感器事件处理、UI动态更新以及资源管理等。下面将详细讲解这些关键知识点。 1. **传感器事件处理**: Android设备通常配备有多种传感器,如...

    Android 动态换肤框架原理

    4. **插件化技术**:为了实现动态换肤,可能需要用到Android的插件化技术,如DexClassLoader或 DexOpener,它们可以加载非主APK中的类和资源,使得皮肤APK能够独立于主应用运行。 5. **线程安全与性能优化**:考虑...

    Android动态换肤

    本文将深入探讨如何实现这个功能,主要基于标题"Android动态换肤"和描述中的关键点:通过宿主工程加载插件apk中的图片,使用反射和类加载器。 首先,我们要理解动态换肤的基本原理。传统的换肤方式通常需要用户下载...

    Android插件换肤Demo

    【Android插件换肤Demo】是一个演示如何在Android应用程序中实现动态皮肤更换功能的示例。这个Demo展示了如何通过插件化技术来实现在运行时切换应用的视觉样式,为用户提供个性化的体验。尽管这个Demo可能并不直接...

    Android皮肤支持:Android皮肤支持是一种易于使用的动态皮肤框架,可用于Android,仅需一行代码即可对其进行集成。 Android换肤框架,极低的学习成本,极好的用户体验。 “一行”代码就可以实现换肤,你值得拥有!

    Android皮肤支持:一种Android换肤框架,极低的学习成本,极好的用户体验。 只需要一行代码,就可以实现换肤,你值得拥有!!! SkinCompatManager . withoutActivity( this ) . loadSkin(); 就这么简单,你的APK已经...

    Android插件化开发之动态加载本地皮肤包进行换肤

    在Android应用开发中,"动态加载本地皮肤包进行换肤"是一种提高用户体验和个性化定制的常见技术。通过插件化开发,我们可以实现不更新主应用就能更换应用界面皮肤的效果,从而满足用户对不同主题和风格的需求。以下...

    插件apk换肤代码

    "插件apk换肤代码"这个主题主要涉及到动态加载外部皮肤包的技术,它允许用户自由更换应用的主题色或者界面风格,而无需重新安装整个应用。下面将详细介绍这个过程涉及的关键知识点。 1. **AndroidManifest.xml配置*...

    Android应用源码之换肤.zip

    本资源“Android应用源码之换肤.zip”提供了实现这一功能的源代码示例,旨在帮助开发者深入理解如何在Android应用中实现实时换肤。 首先,我们来探讨换肤的基本原理。在Android应用中,换肤通常涉及到改变UI组件的...

    Android实现换肤的两种思路分析

    这里来了解换肤实现及不同方案的差异和使用场合。 一、从功能上划分 1) 软件内置多个皮肤,用户不能修改; 2) 官方提供皮肤下载,用户使用下载的皮肤; 3) 官方提供皮肤制作工具或方法,用户自制皮肤。 二、皮肤定义...

    Android实现apk插件方式换肤的实例讲解

    在Android开发中,实现apk插件方式的换肤是一种提高用户体验和灵活性的策略。下面将详细解释这个过程涉及的关键知识点。 1. **何时换肤**: 在Android应用中,为了确保用户不会看到旧皮肤的颜色,换肤应在XML布局...

    Android例子源码点击换肤例子整体背景更换.zip

    换肤功能通常会将皮肤资源打包为单独的APK或使用插件化技术,以便用户可以下载和安装不同的皮肤包。 此外,考虑到用户体验,换肤功能还应提供预览功能,让用户在应用皮肤前能看到效果。同时,为了兼容不同设备和...

Global site tag (gtag.js) - Google Analytics