android程序换皮肤之一

来源:互联网 发布:淘宝渔夫帽推荐 编辑:程序博客网 时间:2024/03/29 03:19
 

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

 

那还是写上我的东西。

 

此处的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中皮肤!