Android 内置皮肤

皮肤内置在程序里面的!其实可以不用我这么复杂的,直接每次换肤更改图片资源就可以。

 

那还是写上我的东西。

 

此处的xml借鉴郑涛的一篇关于xml详解一的一篇文章,写得很不错,大家也可以看看!

 

http://www.cnblogs.com/zhengtao/articles/1924940.html

 

基本思路是,每个控件在布局中写资源是drawable中的一个xml文件

 

而这个xml文件给每个控件分了4个level的图片

 

在程序中直接修改level就可以达到修改控件的图片资源!

 

贴上一个 button的buttonskin1.xml

 

 1 <?xml version="1.0" encoding="utf-8"?>
2
3 <level-list xmlns:android="http://schemas.android.com/apk/res/android">
4
5 <item android:maxLevel="1" android:drawable="@drawable/button11" />
6
7 <item android:maxLevel="2" android:drawable="@drawable/button21" />
8
9 <item android:maxLevel="3" android:drawable="@drawable/button31" />
10
11 <item android:maxLevel="4" android:drawable="@drawable/button41" />
12
13 </level-list>

在布局文件里面 设置button的资源时候直接像引用图片那样android:background = "@drawable/buttonskin1"

 

程序里面通过修改level就可以修改它的bg button1.getBackground().setLevel(level);

 

之所以这样写是在 再添加其他的主题时候只需要在button里面再添加个level就可以 再弄个监听器触发一下

 

布局文件main.xml:

  1 <?xml version="1.0" encoding="utf-8"?>
2
3 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
4
5 android:orientation="vertical"
6
7 android:layout_width="fill_parent"
8
9 android:layout_height="fill_parent"
10
11 >
12
13 <LinearLayout
14
15 android:id = "@+id/linearlayout1"
16
17 android:layout_width = "fill_parent"
18
19 android:layout_height = "wrap_content"
20
21 android:layout_alignParentTop = "true">
22
23 <Button
24
25 android:id = "@+id/button1"
26
27 android:layout_width = "wrap_content"
28
29 android:layout_height = "wrap_content"
30
31 android:background = "@drawable/buttonskin1"/>
32
33 <Button
34
35 android:id = "@+id/button2"
36
37 android:layout_width = "wrap_content"
38
39 android:layout_height = "wrap_content"
40
41 android:background = "@drawable/buttonskin2"/>
42
43 <Button
44
45 android:id = "@+id/button3"
46
47 android:layout_width = "wrap_content"
48
49 android:layout_height = "wrap_content"
50
51 android:background = "@drawable/buttonskin3"/>
52
53 <Button
54
55 android:id = "@+id/button4"
56
57 android:layout_width = "wrap_content"
58
59 android:layout_height = "wrap_content"
60
61 android:background = "@drawable/buttonskin4"/>
62
63
64 </LinearLayout>
65
66
67
68 <LinearLayout
69
70 android:id = "@+id/linearlayout2"
71
72 android:layout_width = "fill_parent"
73
74 android:layout_height = "wrap_content"
75
76 android:layout_alignParentBottom = "true">
77
78 <Button
79
80 android:id = "@+id/button5"
81
82 android:layout_width = "wrap_content"
83
84 android:layout_height = "wrap_content"
85
86 android:background = "@drawable/buttonskin5"/>
87
88 <Button
89
90 android:id = "@+id/button6"
91
92 android:layout_width = "wrap_content"
93
94 android:layout_height = "wrap_content"
95
96 android:background = "@drawable/buttonskin6"/>
97
98 <Button
99
100 android:id = "@+id/button7"
101
102 android:layout_width = "wrap_content"
103
104 android:layout_height = "wrap_content"
105
106 android:background = "@drawable/buttonskin7"/>
107
108 <Button
109
110 android:id = "@+id/button8"
111
112 android:layout_width = "wrap_content"
113
114 android:layout_height = "wrap_content"
115
116 android:background = "@drawable/buttonskin8"/>
117
118
119 </LinearLayout>
120
121 <ImageView
122
123 android:id = "@+id/image"
124
125 android:layout_width = "fill_parent"
126
127 android:layout_height = "wrap_content"
128
129 android:layout_below = "@id/linearlayout1"
130
131 android:layout_above = "@id/linearlayout2"
132
133 android:src = "@drawable/imageskin"/>
134
135
136
137 </RelativeLayout>
主题程序:skin.java:
 1 package com.bkship.skin;
2
3
4 import android.app.Activity;
5 import android.content.Context;
6 import android.content.pm.PackageManager.NameNotFoundException;
7 import android.os.Bundle;
8 import android.util.Log;
9 import android.view.View;
10 import android.view.View.OnClickListener;
11 import android.widget.Button;
12 import android.widget.ImageView;
13
14
15 public class Skin extends Activity {
16 private Button button1;
17 private Button button2;
18 private Button button3;
19 private Button button4;
20 private Button button5;
21 private Button button6;
22 private Button button7;
23 private Button button8;
24 private ImageView image;
25
26 public void onCreate(Bundle savedInstanceState) {
27 super.onCreate(savedInstanceState);
28 setContentView(R.layout.main);
29 button1 = (Button)findViewById(R.id.button1);
30 button2 = (Button)findViewById(R.id.button2);
31 button3 = (Button)findViewById(R.id.button3);
32 button4 = (Button)findViewById(R.id.button4);
33 button5 = (Button)findViewById(R.id.button5);
34 button6 = (Button)findViewById(R.id.button6);
35 button7 = (Button)findViewById(R.id.button7);
36 button8 = (Button)findViewById(R.id.button8);
37 image = (ImageView)findViewById(R.id.image);
38 button5.setOnClickListener(onClick);
39 button6.setOnClickListener(onClick);
40 button7.setOnClickListener(onClick);
41 button8.setOnClickListener(onClick);
42 }
43
44
45 OnClickListener onClick = new OnClickListener(){
46 public void onClick(View v) {
47 int id = v.getId();
48 switch(id){
49 case R.id.button5:
50 changeSkinLevel(1);
51 break;
52 case R.id.button6:
53 changeSkinLevel(2);
54 break;
55 case R.id.button7:
56 changeSkinLevel(3);
57 break;
58 case R.id.button8:
59 changeSkinLevel(4);
60 break;
61 default:
62 break;
63 }
64 }
65 };
66 private void changeSkinLevel(int level) {
67 button1.getBackground().setLevel(level);
68 button2.getBackground().setLevel(level);
69 button3.getBackground().setLevel(level);
70 button4.getBackground().setLevel(level);
71 button5.getBackground().setLevel(level);
72 button6.getBackground().setLevel(level);
73 button7.getBackground().setLevel(level);
74 button8.getBackground().setLevel(level);
75 image.getDrawable().setLevel(level);
76 }
77 }
再最下面的4个按钮添加监听器 分别对应4中皮肤!


内容参看:http://blog.csdn.net/ainibaifenbai/article/details/7034905

posted on 2012-03-19 14:27  simpleceo  阅读(697)  评论(0编辑  收藏  举报

导航