首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

android程序换肌肤之一

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

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   非常给力!!!

热点排行