android程序换皮肤之一
皮肤内置在程序里面的!其实可以不用我这么复杂的,直接每次换肤更改图片资源就可以。
?
那还是写上我的东西。
?
此处的xml借鉴郑涛的一篇关于xml详解一的一篇文章,写得很不错,大家也可以看看!
?
http://www.cnblogs.com/zhengtao/articles/1924940.html
?
基本思路是,每个控件在布局中写资源是drawable中的一个xml文件
?
而这个xml文件给每个控件分了4个level的图片
?
在程序中直接修改level就可以达到修改控件的图片资源!
?
贴上一个 button的buttonskin1.xml
?
?
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
? ? <item android:maxLevel="1" android:drawable="@drawable/button11" />
? ? <item android:maxLevel="2" android:drawable="@drawable/button21" />
? ? <item android:maxLevel="3" android:drawable="@drawable/button31" />
? ? <item android:maxLevel="4" android:drawable="@drawable/button41" />
</level-list>
?
在布局文件里面 设置button的资源时候直接像引用图片那样android:background =?"@drawable/buttonskin1"
?
程序里面通过修改level就可以修改它的bg?button1.getBackground().setLevel(level);
?
之所以这样写是在 再添加其他的主题时候只需要在button里面再添加个level就可以 再弄个监听器触发一下
?
布局文件main.xml:
?
?
<?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/buttonskin1"/>
<Button
android:id = "@+id/button2"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:background = "@drawable/buttonskin2"/>
<Button
android:id = "@+id/button3"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:background = "@drawable/buttonskin3"/>
<Button
android:id = "@+id/button4"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:background = "@drawable/buttonskin4"/>
</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/buttonskin5"/>
<Button
android:id = "@+id/button6"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:background = "@drawable/buttonskin6"/>
<Button
android:id = "@+id/button7"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:background = "@drawable/buttonskin7"/>
<Button
android:id = "@+id/button8"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:background = "@drawable/buttonskin8"/>
</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:src = "@drawable/imageskin"/>
?
</RelativeLayout>
主题程序:skin.java:
package com.bkship.skin;
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 Skin extends Activity {? ? 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(){public void onClick(View v) {int id = v.getId();switch(id){case R.id.button5:changeSkinLevel(1);break;case R.id.button6:changeSkinLevel(2);break;case R.id.button7:changeSkinLevel(3);break;case R.id.button8:changeSkinLevel(4);break;default:break;}}};private void changeSkinLevel(int level) {button1.getBackground().setLevel(level);button2.getBackground().setLevel(level);button3.getBackground().setLevel(level);button4.getBackground().setLevel(level);button5.getBackground().setLevel(level);button6.getBackground().setLevel(level);button7.getBackground().setLevel(level);button8.getBackground().setLevel(level);image.getDrawable().setLevel(level);}}
再最下面的4个按钮添加监听器 分别对应4中皮肤!
?
?
?
?
1 楼 wumucheng 2012-02-24 非常给力!!!