`
bkship
  • 浏览: 47879 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

相关推荐

    android程序换皮肤之二

    本篇文章将深入探讨如何实现这一功能,主要关注"android程序换肤之二"这个主题。通过阅读博文(https://bkship.iteye.com/blog/1104573),我们可以了解到实现Android换肤的高级技术和最佳实践。 首先,我们要理解...

    Android之主题皮肤实现

    主题(Theme)是Android系统提供的一种全局样式设定,它可以控制应用程序的整体外观,包括字体颜色、背景色、按钮样式等。皮肤(Skin)则是主题的一个变体,它允许用户根据个人喜好更改应用的视觉风格,而无需改变...

    uniapp 实现更换主题皮肤

    在开发移动应用时,主题皮肤的可更换性是提升用户体验的重要功能之一。uniAPP作为一个跨端开发框架,允许开发者用一套代码实现多平台部署,包括iOS、Android、H5等。本文将详细介绍如何在uniAPP中实现主题皮肤的更换...

    Android应用程序内换肤解决方案(一)之测试Demo

    android应用程序内部换肤 博客地址:http://blog.csdn.net/hailushijie/article/details/9427651

    Android插件化开发之动态加载本地皮肤包进行换肤

    3. **动态加载**:动态加载是指在应用程序运行过程中,根据需要加载皮肤包,而不是在安装时一次性加载所有资源。这样可以减少主应用的体积,同时允许用户在不更新应用的情况下更改皮肤。 4. **资源映射**:为了实现...

    Android-skin-sprite另一种不重启Activity切换Android夜间模式的库

    在Android应用开发中,提供夜间模式是提升用户体验的重要方式之一。传统的实现夜间模式通常需要重启Activity,这可能导致界面闪烁,影响用户体验。而“Android-skin-sprite”库提供了一种无需重启Activity就能实现...

    新版Android开发教程.rar

    Android 是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。 Beta 版 的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 ...

    Android应用源码之换肤.zip

    在Android应用开发中,换肤功能是一个非常受欢迎的特性,它允许用户根据个人喜好更改应用程序的主题和视觉样式。"Android应用源码之换肤.zip"这个压缩包很可能包含了一个实现Android应用换肤功能的示例项目,我们...

    Android应用源码之换肤.rar

    在Android应用开发中,换肤功能是一个非常受欢迎的特性,它允许用户根据个人喜好更改应用程序的主题颜色和风格。"Android应用源码之换肤.rar"这个压缩包文件很可能包含了一个完整的Android项目源代码,用于演示如何...

    Android高级编程--源代码

     由于Android构建在开源代码的框架之上,而且提供了强大的SDK库和开放的理念,所以它为广大的没有任何移动应用程序开发经验的新手开辟了一条开发完美的移动应用程序的康庄大道。而富有经验的移动开发人员现在也可以...

    Android SDK 目录和作用详解

    Android SDK 是 Android 开发中最重要的组件之一,它提供了大量的开发工具和资源。了解 Android SDK 的目录结构和作用是非常重要的。本文将详细介绍 Android SDK 中各个目录的名称和作用。 1、add-ons 目录 add-...

    Android开发环境搭建

    《Android开发环境搭建详解》 ...虽然初期可能需要花费一些时间,但一旦环境搭建成功,就能顺利地开始Android应用程序的开发之旅。记住,实践是最好的老师,动手尝试并不断学习,才能在Android开发领域取得进步。

    皮肤控件 60多种样式

    皮肤控件在软件开发中是一种重要的用户界面设计元素,它允许开发者为应用程序提供美观且个性化的外观。在本文中,我们将深入探讨皮肤控件的概念、重要性、种类以及如何在不同平台和编程语言中实现它们。 皮肤控件,...

    天天动听皮肤包

    而皮肤作为其特色之一,允许用户根据个人喜好调整应用界面的颜色、布局和主题,使音乐播放过程更加个性化和趣味化。 这个压缩包中的"skin"文件,通常包含了天天动听应用所识别的皮肤文件。这些文件可能包括图片资源...

    安卓一键换肤,不重启activity,无侵入性,只需配置xml

    在Android应用开发中,用户界面(UI)的可定制性和个性化是吸引用户的重要特性之一。"安卓一键换肤,不重启activity,无侵入性,只需配置xml"这个主题涉及到了一个高效且用户友好的技术,它允许用户快速改变应用程序...

    Android模拟器 SDK 2.1 下载与安装教程(图文)

    在Android开发过程中,Android模拟器是一个至关重要的工具,它允许开发者在本地计算机上测试和调试应用程序,而无需实际设备。本文将详细介绍如何下载并安装Android SDK 2.1版本的模拟器。 首先,你需要访问Google...

    android 讯飞输入法

    总的来说,Android讯飞输入法凭借其先进的语音识别技术和手写输入功能,以及个性化的用户体验,已经成为Android平台上广受欢迎的输入工具之一。随着技术的不断迭代和更新,我们可以期待它在未来带来更多的创新和提升...

Global site tag (gtag.js) - Google Analytics