- 浏览: 47880 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
嘟嘟橙:
新手请教,就是添加较多联系人时,速度会慢,有没有优化的办法? ...
批量添加联系人 -
嘟嘟橙:
新手学习。感谢分享。
批量添加联系人 -
one_old_water:
哥,网上传来传去的就是想要那种效果:按第一次会提示,两秒后按还 ...
My “再按一次后退键退出应用” -
yx1989:
qiuyouzhi 写道你好,我用这种方式插入联系人,当联系人 ...
批量添加联系人 -
qiuyouzhi:
你好,我用这种方式插入联系人,当联系人在二三百条时候,将近耗了 ...
批量添加联系人
通过网上流传的sharedUserId实现 不同程序间的资源共享
这种就是皮肤分离,皮肤是个单独的apk单独从网上下下来安装后,供主程序调用资源
大家可以参考下雨辰专栏写的一篇文章:
http://blog.csdn.net/suiyc/archive/2011/04/17/6329212.aspx
QQ,墨迹天气,搜狗输入法貌似都是这种方式实现的
在主程序,皮肤程序的manifest中都添加同一个sharedUserId,这个应该是随便你写,只要共享工程的一样
android:sharedUserId=com.bkship
皮肤工程比较简单创建一个后就是在manifest中添加sharedUserId 然后在drawable中放进你的图片就可以
主程序里面通过下面方法来调用皮肤工程
Context ctx = MySkin.this.createPackageContext(
“com.bkship.skin1”,Context.CONTEXT_IGNORE_SECURITY);
button1.setBackgroundDrawable(ctx.getResources().getDrawable(R.drawable.button1));
此处的com.bkship.skin1为你皮肤工程的包名。
而且这里要注意的就是你要替换的资源的名字 必须跟 主程序里面的资源名字一致
这可能也是为什么QQ,墨迹天气,搜狗输入法 自身只带一套皮肤的原因。
因为主程序带多套皮肤的话,必然是不同的名字,那皮肤工程没法去跟替换的资源同名,因为你替换时候
当前不定是哪个资源呢,当然这也仅仅是我自己的理解啦。
布局跟我上一篇的一样
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout
android:id = "@+id/linearlayout1"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:layout_alignParentTop = "true">
<Button
android:id = "@+id/button1"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:background = "@drawable/button1"/>
<Button
android:id = "@+id/button2"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:background = "@drawable/button2"/>
<Button
android:id = "@+id/button3"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:background = "@drawable/button3"/>
<Button
android:id = "@+id/button4"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:background = "@drawable/button4"/>
</LinearLayout>
<LinearLayout
android:id = "@+id/linearlayout2"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:layout_alignParentBottom = "true">
<Button
android:id = "@+id/button5"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:background = "@drawable/button5"/>
<Button
android:id = "@+id/button6"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:background = "@drawable/button6"/>
<Button
android:id = "@+id/button7"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:background = "@drawable/button7"/>
<Button
android:id = "@+id/button8"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:background = "@drawable/button8"/>
</LinearLayout>
<ImageView
android:id = "@+id/image"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:layout_below = "@id/linearlayout1"
android:layout_above = "@id/linearlayout2"
android:background = "@drawable/bg"/>
</RelativeLayout>
下面是主体程序 :
package com.bkship.myskin;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
public class MySkin extends Activity {
/** Called when the activity is first created. */
private Button button1;
private Button button2;
private Button button3;
private Button button4;
private Button button5;
private Button button6;
private Button button7;
private Button button8;
private ImageView image;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button1 = (Button)findViewById(R.id.button1);
button2 = (Button)findViewById(R.id.button2);
button3 = (Button)findViewById(R.id.button3);
button4 = (Button)findViewById(R.id.button4);
button5 = (Button)findViewById(R.id.button5);
button6 = (Button)findViewById(R.id.button6);
button7 = (Button)findViewById(R.id.button7);
button8 = (Button)findViewById(R.id.button8);
image = (ImageView)findViewById(R.id.image);
button5.setOnClickListener(onClick);
button6.setOnClickListener(onClick);
button7.setOnClickListener(onClick);
button8.setOnClickListener(onClick);
}
OnClickListener onClick = new OnClickListener(){
@Override
public void onClick(View v) {
Context ctx = null;
int id = v.getId();
String skinPackage = null;
switch (id ) {
case R.id.button5:
skinPackage = "com.bkship.myskin";
break;
case R.id.button6:
skinPackage = "com.bkship.myskin1";
break;
case R.id.button7:
skinPackage = "com.bkship.myskin2";
break;
case R.id.button8:
skinPackage = "com.bkship.myskin3";
break;
default:
break;
}
try {
ctx = MySkin.this.createPackageContext(
skinPackage,
Context.CONTEXT_IGNORE_SECURITY);
Log.e("", "ctx");
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.e("", "ctx is null");
}
button1.setBackgroundDrawable(ctx.getResources().getDrawable(
R.drawable.button1));
button2.setBackgroundDrawable(ctx.getResources().getDrawable(
R.drawable.button2));
button3.setBackgroundDrawable(ctx.getResources().getDrawable(
R.drawable.button3));
button4.setBackgroundDrawable(ctx.getResources().getDrawable(
R.drawable.button4));
button5.setBackgroundDrawable(ctx.getResources().getDrawable(
R.drawable.button5));
button6.setBackgroundDrawable(ctx.getResources().getDrawable(
R.drawable.button6));
button7.setBackgroundDrawable(ctx.getResources().getDrawable(
R.drawable.button7));
button8.setBackgroundDrawable(ctx.getResources().getDrawable(
R.drawable.button8));
image.setBackgroundDrawable(ctx.getResources().getDrawable(
R.drawable.bg));
}
};
}
将主程序跟三个皮肤程序 打包奉上!
对了 要运行看效果的话 得将皮肤包三个先在机子上跑一下。
要主程序调用皮肤工程 得皮肤工程安装了才行
同时这种情况会导致安装了好多皮肤后你的程序列表里面会多好多皮肤程序,
可以通过下面的代码将其隐藏,只能在管理应用程序那里能看到
在要隐藏的皮肤工程的manifest里面的intentfilter中去掉这句
<category android:name="android.intent.category.LAUNCHER"></category>
这句话就是说 让我们的应用程序在launcher里启动起来,
不写它就是不让在那里启动,当然也就看不到我们的应用程序的图标了。
关于在launcher中不显示,这块,借鉴于cat_fang 的blog :
http://archive.cnblogs.com/a/2068309/
- MySkin.rar (2.8 MB)
- 下载次数: 560
发表评论
-
蓝牙传输文件
2011-09-28 10:51 4221这篇文章分为两部分: 第一部分:使用系统自身带的蓝牙功能,直 ... -
通讯录侧边栏快速滑动效果的实现
2011-09-20 10:40 3504那,我原创的文章比较少,所以基本上都是自己看了,然后稍加修改的 ... -
【转】Android APK反编译详解(附图)
2011-09-06 10:18 1035原帖地址:http://www.devdiv.com/arti ... -
解析xml
2011-09-05 15:17 884FileInfo是我自己定义的类 public clas ... -
利用popupWindow来制作自定义menu
2011-09-05 15:07 1806我找了好久没发现怎么给系统自带的menu换背景,网上有个帖子写 ... -
java 对读取的文件进行排序
2011-09-05 14:51 7635参数里面的isAscend 用来决定是升序排列 还是降序排列: ... -
java 递归读取文件夹里的文件
2011-09-05 14:40 5650public static void scanSingle ... -
java 基本的文件操作
2011-09-05 14:35 901好吧,我基础真的很不扎实。 基本的文件操作都不熟,那么多总结 ... -
获取未安装apk的信息
2011-09-05 14:13 1786申明不是原创,忘记是在哪看的啦,网上转的那么多,也不知道谁是原 ... -
利用图片的填充属性来制作进度条
2011-09-05 12:46 2397大概原理就是定义了imageView 然后他的背景是一个bit ... -
类SldingDrawer的实现
2011-09-05 11:43 1603来自海涛给的例子,谢谢海涛一直的指导! 系统的sliding ... -
【转】工作八年总结
2011-09-02 23:26 740我只是想在某些时候想看再看一遍时候不至于到处去找,所以就转了原 ... -
显示隐藏软键盘
2011-08-30 10:44 871public void showInput(boolean ... -
My “再按一次后退键退出应用”
2011-07-20 16:50 1104其实你去网上搜这个标题一大堆的帖子,千篇一律的转自同一个人的帖 ... -
【转】Toast大全
2011-07-20 16:36 1196长见识了,转来留着用 原帖地址:http://www.cnb ... -
【转】关于android.view.WindowLeaked的解决方案
2011-07-12 09:15 834原帖:http://blog.csdn.net/u_x ... -
android程序换皮肤之一
2011-06-23 20:13 3043皮肤内置在程序里面的!其实可以不用我这么复杂的,直接每次换肤更 ... -
批量添加联系人
2011-06-21 20:21 4462说实话,我找了一整天的帖子,好像所有关于批量添加联系人的帖子都 ... -
联系人的基本操作
2011-06-21 20:07 1174其实联系人那几个表刚开始看起来很绕的! 后来接触 ...
相关推荐
本文将探讨如何实现Android程序的换肤功能,主要关注于"android程序换肤之一"这个主题。博客链接(由于此处无法直接访问,我们将基于常见实践进行解释)可能提供更深入的技术细节和示例代码。 1. **皮肤概念**: -...
在Android平台上,模仿QQ更换皮肤是一项有趣的挑战,它涉及到用户界面的动态定制和主题管理。在实现这个功能的过程中,开发者需要深入理解Android系统的组件、事件监听以及数据存储机制。以下是一些关键的知识点: ...
在Android应用开发中,更换皮肤是一项常见的需求,它允许用户根据个人喜好自定义应用的外观。本文将深入探讨如何通过zip文件实现这一功能,主要涉及的技术包括资源管理、ZipFile类的使用以及动态加载。 首先,皮肤...
2. **动态加载资源**:在应用启动或者用户切换皮肤时,程序需要能够动态地替换当前使用的资源。这通常通过反射和自定义资源加载器来实现。你可以创建一个`SkinManager`类,该类负责加载和切换皮肤。它会遍历skin APK...
主题(Theme)是Android系统提供的一种全局样式设定,它可以控制应用程序的整体外观,包括字体颜色、背景色、按钮样式等。皮肤(Skin)则是主题的一个变体,它允许用户根据个人喜好更改应用的视觉风格,而无需改变...
在Android平台上,动态皮肤更换是一项常见的用户自定义功能,它允许用户根据个人喜好更改应用程序的外观。本资源“Android应用源码安卓软件实现动态皮肤更换.zip”提供了实现这一功能的源代码,对于开发者来说,这是...
在IT行业中,程序皮肤是一种非常重要的用户界面设计元素,它允许用户根据个人喜好自定义软件的外观。"更换程序皮肤示例(含源代码)"是一个实用的学习资源,旨在教授开发者如何实现程序皮肤的更换功能。这个压缩包...
在Android开发中,皮肤切换是一种常见的用户界面定制技术,它允许用户根据个人喜好更改应用程序的外观。本Demo主要展示了如何在Android应用中实现皮肤切换功能,以提供更丰富的用户体验。以下将详细介绍Android应用...
- 在应用程序APK和皮肤APK的`AndroidManifest.xml`中配置`android:sharedUserId="com.yee"`。 2. **文件命名一致性**: - 确保应用APK和皮肤APK中对于同一功能的资源文件名相同。例如,如果应用APK中的图片文件名...
"Android 换皮肤源码.zip"可能包含了一个实现这一功能的示例项目,我们可以从这个压缩包中的两个文件名"Re_Skin1"和"Re_Skin"推测,它们可能是实现换肤功能的不同部分或者不同版本。 Android换肤技术主要涉及到以下...
在IT领域,"换皮肤程序"是一种允许用户自定义软件界面外观的应用,它通常通过提供多种主题或皮肤供用户选择,以实现个性化定制。这样的功能不仅提升了用户体验,也让软件更符合个人审美,增加了用户与软件的互动性。...
本示例"Android程序研发源码Android 实现皮肤打包成apk的demo"提供了如何将皮肤打包成一个可独立安装的APK文件的详细实现。通过分析这个Demo,我们可以学习到以下关键知识点: 1. **皮肤资源管理**: - 皮肤通常...
这个类需要能够读取皮肤配置,如皮肤ID、资源路径等,并在应用程序启动时或用户手动切换时更新全局的主题设置。可以使用SharedPreferences存储用户的皮肤选择,以便在下次启动应用时自动加载。 工具的使用在皮肤...
这份"Android程序研发源码点心桌面皮肤源码.zip"包含的源代码是点心桌面皮肤开发的关键组成部分,对于Android开发者,尤其是对UI设计和自定义组件感兴趣的开发者来说,这是一个宝贵的资源。 首先,我们可以从这个...
了解并适配各种Android模拟器皮肤对于开发者来说至关重要,因为这样可以确保应用程序在不同设备上的一致性与稳定性。通过使用这些新的皮肤,开发者可以更全面地测试其应用,提高用户满意度,并减少因设备兼容性问题...
在Android开发中,皮肤是一种常见的应用定制方式,它允许用户根据个人喜好更改应用程序的外观。本教程将介绍如何将Android皮肤打包成一个可独立安装的APK文件,从而实现皮肤的动态更换。以下是对该主题的详细阐述: ...
2. **本地皮肤框架**:这是一种允许用户从本地存储(如计算机硬盘)选择和应用皮肤的架构。它通常包含一个皮肤管理器,负责读取、解析和应用皮肤文件。框架还可能包括一套标准,规定皮肤文件的结构和格式,以便于...
在Android开发中,换肤功能是一项常见的需求,它允许用户根据个人喜好更改应用程序的外观,包括布局(layout)、字符串(string)以及样式(style)等资源。本文将深入探讨如何在Android应用中实现这一功能。 首先...