android 类似QQ 换皮肤 实现思路 apk资源共享

原文: http://t80t90s.com/view.asp?id=23


1、首先在AndroidManifest.xml中的<manifest>中加入android:sharedUserId="共享id"----具有相同id的apk可以不受限制访问。

2、根据包名创建Context,在Activity下有提供方法createPackageContext能够依据包名创建。

3、获取共享的Apk资源。

注意:

1、Activity中的findViewById()与View中的findViewById()区别在于:

Activity需要对setContextView()后的Layout才能由findViewById()获得View。

View只需要有对象即可由findViewById()获得在View中包含id的View。

2、在资源获取方面主要获取那个apk下的资源主要是由Context决定。


在资源apk没安装前:

android 类似QQ 换皮肤 实现思路 apk资源共享_第1张图片

资源文件安装后:


主apk包名:com.app.share;

资源apk包名:com.app.share2;

主Activity中获取资源apk中R,并且生成Layout对id为button1的按钮设置监听。

view plain
  1. publicclassStartActextendsActivity {

  2. /** Called when the activity is first created. */

  3. @Override

  4. publicvoidonCreate(Bundle savedInstanceState) {

  5. super.onCreate(savedInstanceState);

  6. // setContentView(R.layout.main);

  7. Button btn =newButton(this);

  8. btn.setText("TO SECOND");

  9. btn.setOnClickListener(newOnClickListener() {

  10. @Override

  11. publicvoidonClick(View v) {

  12. // TODO Auto-generated method stub

  13. Intent intent =newIntent(StartAct.this, SecontAct.class);

  14. StartAct.this.startActivity(intent);

  15. }

  16. });

  17. this.setContentView(btn);

  18. try{

  19. Context other =this.createPackageContext("com.app.share2", CONTEXT_IGNORE_SECURITY|CONTEXT_INCLUDE_CODE);

  20. Class<?> c = other.getClassLoader().loadClass("com.app.share2.R");

  21. Class<?>[] cl = c.getClasses();

  22. intb =0;

  23. for(inti =0; i < cl.length; i++) {

  24. Log.d("TAG", cl[i].getSimpleName());

  25. Field field[] = cl[i].getFields();

  26. for(intj =0; j < field.length; j++) {

  27. Log.d("TAG","NAME:"+field[j].getName()+"--VALUE:"+field[j].getInt(field[j].getName()));

  28. if(field[j].getName().equals("button1")) {

  29. b = field[j].getInt(field[j].getName());

  30. Log.d("TAG","--------id");

  31. }

  32. };

  33. }

  34. View v = LayoutInflater.from(other).inflate(R.layout.main,null);

  35. Button btn1 = (Button) v.findViewById(b);

  36. btn1.setOnClickListener(newOnClickListener() {

  37. @Override

  38. publicvoidonClick(View v) {

  39. // TODO Auto-generated method stub

  40. Log.d("TAG","BUTTON FROM Share2");

  41. Toast.makeText(StartAct.this,"BUTTON FROM Share2", Toast.LENGTH_SHORT).show();

  42. }

  43. });

  44. this.setContentView(v);

  45. }catch(NameNotFoundException e) {

  46. // TODO Auto-generated catch block

  47. e.printStackTrace();

  48. }catch(ClassNotFoundException e) {

  49. // TODO Auto-generated catch block

  50. e.printStackTrace();

  51. }catch(IllegalArgumentException e) {

  52. // TODO Auto-generated catch block

  53. e.printStackTrace();

  54. }catch(IllegalAccessException e) {

  55. // TODO Auto-generated catch block

  56. e.printStackTrace();

  57. }

  58. }

  59. }


资源apk包Layout view plain
  1. <?xmlversion="1.0"encoding="utf-8"?>

  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

  3. android:orientation="vertical"

  4. android:layout_width="fill_parent"

  5. android:layout_height="fill_parent"

  6. >

  7. <TextView

  8. android:layout_width="fill_parent"

  9. android:layout_height="wrap_content"

  10. android:text="Share2"

  11. />

  12. <Buttonandroid:text="Button"android:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"></Button>

  13. </LinearLayout>

更多相关文章

  1. 003.android资源文件剖析(Resources)
  2. 【Android】TextView动态设置Drawable资源
  3. Android资源文件 - 使用资源存储字符串 颜色 尺寸 整型 布尔值
  4. android之网络资源多线程下载
  5. Android 动态更改Shape(GradientDrawable) 及Seletor(StateListDra
  6. Android 获取XML,DRAWABLE资源
  7. android自带图片资源图标一览,android.R.drawable

随机推荐

  1. Android测量View宽和高的一般通用方法
  2. Android项目结构
  3. Android入门2—创建AVD
  4. Android(安卓)Java调用ffmpeg命令
  5. android的消息机制
  6. android开发视频资源 电驴10G下载
  7. Android自适应屏幕大小和layout布局
  8. Android(安卓)ListView元素间隙线自定义
  9. Android读写XML(下)――创建XML文档
  10. 菜单 Android(安卓)Menu