`
xuela_net
  • 浏览: 525606 次
文章分类
社区版块
存档分类
最新评论

Android动态切换主题

 
阅读更多
软件换肤从功能上可以划分三种:

1) 软件内置多个皮肤,不可由用户增加或修改;

最低的自由度,软件实现相对于后两种最容易。

2) 官方提供皮肤供下载,用户可以使用下载的皮肤;

用户可选择下载自己喜欢的皮肤,有些玩家会破解皮肤的定制方法,自己做皮肤使用,或者传到网上给大家用。

参考:http://blog.csdn.net/zhyooo123/article/details/6697186

3) 官方提供皮肤制作工具或方法,用户可自制皮肤。



关于主题和样式:

就像style一样,主题依然在<style>元素里边申明,也是以同样的方式引用。
不同的是你通过在Android Manifest中定义的<application>和<activity>元素将主题添加到整个程序或者某个 Activity,但是主题是不能应用在某一个单独的View里。

@符号和?符号来应用资源。@符号表明了我们应用的资源是前边定义过的(或者在前一个项目中或者在Android 框架中)。问号?表明了我们引用的资源的值在当前的主题当中定义过

关于设置主题的注意事项:
不少同学会发泄setTheme()竟然会无效。那么注意
使用setTheme()只能在Oncreate()之前使用。在setContentView(),还是不行那么就在super.onCreate(savedInstanceState);之前
如果要使用动态切换主题,那么就必须调用actvity.finish()。然后再重新加载setTheme()

一些参考资料:








接下来来看范例:

设有一个main.xml布局文件。
新建一个xml用于放置多个主题。如:

<--蓝色主题-->
<style name="Theme.Blue">
<item name="pageBackground">@style/page_background_bl</item>
<item name="pagePaddingLayout">@style/page_padding_layout_bl</item>
</style>

<--白色主题-->
<style name="Theme.White">
<item name="pageBackground">@style/page_background_wh</item>
<item name="pagePaddingLayout">@style/page_padding_layout_wh</item> </style>

注意到这里每个主题中的item名字是相同的,且在布局文件main.xml中
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="?pageBackground">
main.xml中引用白色主题还是蓝色主题的pageBackground,交由代码处理。动态切换主题。

代码实现动态切换:
创建一个util类,设置一个全局变量保存主题信息。
那么就必须调用actvity.finish()。然后再重新加载setTheme()

下面贴出主要的代码:
package irdc.ex03_21; 


import android.app.Activity; 
import android.os.Bundle; 
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;


public class EX03_21 extends Activity implements OnClickListener{ 
  /** Called when the activity is first created. */ 
  Button button = null;
  @Override 
  public void onCreate(Bundle savedInstanceState) {
    
    Utils.onActivityCreateSetTheme(this);
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    
    findViewById(R.id.button1).setOnClickListener(this);
    findViewById(R.id.button2).setOnClickListener(this);
    findViewById(R.id.button3).setOnClickListener(this);
    
  }
  @Override
  public void onClick(View v)
  {
    System.out.println("单击按钮");
    // TODO Auto-generated method stub
    switch (v.getId())
    {
    case R.id.button1:
      System.out.println("主题1");
      Utils.changeToTheme(this, 1);
      break;
    case R.id.button2:
      System.out.println("主题2");
      Utils.changeToTheme(this, 2);
      break;
    case R.id.button3:
      System.out.println("主题3");
      Utils.changeToTheme(this, 3);
      break;
    }
    
  }
}

package irdc.ex03_21;

import android.app.Activity;
import android.content.Intent;

public class Utils
{
	private static int sTheme;

	public final static int THEME_DEFAULT = 0;
	public final static int THEME_WHITE = 1;
	public final static int THEME_BLUE = 2;

	/**
	 * Set the theme of the Activity, and restart it by creating a new Activity
	 * of the same type.
	 */
	public static void changeToTheme(Activity activity, int theme)
	{
		sTheme = theme;
		activity.finish();

		activity.startActivity(new Intent(activity, activity.getClass()));
	}

	/** Set the theme of the activity, according to the configuration. */
	public static void onActivityCreateSetTheme(Activity activity)
	{
		switch (sTheme)
		{
		default:
		case 1:
		  activity.setTheme(R.style.Theme_Translucent);
			break;
		case 2:
			activity.setTheme(R.style.Theme_Translucent2);
			break;
		case 3:
			activity.setTheme(R.style.Theme_Transparent);
			break;
		}
	}
}

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
  <TextView
  android:textColor="@drawable/darkgreen"
  android:layout_width="fill_parent" 
  android:layout_height="wrap_content" 
  android:text="@string/str_text_view1"
  />

  <Button
      android:id="@+id/button2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="主题1" />

  <Button
      android:id="@+id/button1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="主题2" />

  <Button
      android:id="@+id/button3"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="主题3" />

</LinearLayout>



分享到:
评论

相关推荐

    android 动态切换主题

    2. **定义主题切换函数**:创建一个函数,用于根据用户选择的主题动态切换。这个函数可能如下所示: ```java public void switchTheme(Context context, int themeId) { // 获取当前运行的Activity Activity ...

    Android 主题动态切换

    通过以上步骤,开发者可以实现Android应用的主题动态切换,从而提升用户体验,让他们可以根据个人喜好定制应用的外观。同时,这也是一种优化应用的方式,因为它允许用户在不卸载应用的情况下改变其视觉风格。

    Android Style\\Theme动态切换

    这篇博客“Android Style\\Theme动态切换”可能探讨了如何在Android应用程序中实现实时改变主题和样式的技巧。 首先,我们需要理解Android中的Theme和Style的基本概念。Theme是全局的,通常应用于整个应用程序或...

    android主题设置与主题切换

    7. **主题动态加载** - 动态加载主题涉及到运行时更改应用的资源,可能需要重新创建Activity以应用新主题,这通常涉及更复杂的处理。 通过以上步骤,我们可以实现Android应用中多样化的主题风格,并轻松实现一键...

    Android 轻松打造一个APP动态切换桌面图标Launcher

    在Android平台上,开发一款能够动态切换桌面图标的App(Launcher)是一项有趣且实用的技术挑战。这个过程涉及到Android系统的启动器接口、图标资源管理以及用户界面的设计。以下将详细阐述实现这一功能所需的关键...

    Android 日间/夜间模式 主题切换

    ThemeDemo日夜间模式切换,页面切换的时候附带动画特效, 关于多主题实现的,大牛这里的做法是继承AppCompatActivity,置换了AppCompatDelegate中...在解析以后会根据控件转换成支持主题切换的控件.解放冗余的名称.

    Android 主题切换,切换字体颜色颜色,背景色,图片引用文件等

    本文将深入探讨如何在Android中实现主题切换功能。 一、理解Android主题 Android主题是在应用程序或活动中定义的一系列样式属性,这些属性可以影响到控件的外观,如按钮、文本框等。主题通常定义在res/values/...

    Android Studio 护眼主题打包

    "Android Studio 护眼主题打包"是指为Android Studio创建或配置一个能减轻眼睛疲劳的暗色或者低亮度主题,并将其打包以便在其他设备或系统上安装和使用。下面我们将深入探讨这一主题的各个方面。 首先,了解Android...

    android切换主题一(apk方式)

    在Android平台上,为应用切换主题是一项常见的需求,可以提供个性化的用户体验。本篇文章将深入探讨如何通过apk皮肤的方式来实现这一功能。首先,我们要理解apk皮肤的本质:它实际上是一种可替换的应用资源包,包含...

    android studio (as)主题theme

    在Android开发领域,Android Studio(AS)作为官方推荐的集成开发环境(IDE),其自定义主题功能极大地提升了开发者的工作效率和舒适度。本主题相关的压缩包文件包括"ladies night2.jar", "cobalt.jar", "visual ...

    Android UI界面之切换主题的实现代码.rar

    在Android开发中,UI界面的设计和交互是用户体验的关键部分,而动态切换主题是提升用户个性化体验的一个重要功能。本文将详细解析如何实现Android应用中切换主题的代码。 首先,我们需要理解Android中的主题(Theme...

    android主题切换demo

    本示例"android主题切换demo"将介绍如何通过编程方式实现在运行时切换应用的主题,从而为用户提供个性化的体验。 首先,我们需要在项目的res/values目录下创建不同的主题样式文件。例如,可以创建两个主题:`styles...

    Android动态更换应用图标和应用名称

    然而,在某些特定场景下,比如个性化定制、多品牌合作或者动态主题切换时,我们可能需要在应用运行时动态地改变应用的图标和名称。这就是“Android动态更换应用图标和应用名称”这一技术的核心所在。 在Android中,...

    Android夜间模式动态切换

    "Android夜间模式动态切换"这个话题主要关注如何在应用程序中实现实时改变界面颜色方案,以便用户可以在明亮环境下舒适地使用(日间模式)或者在暗环境中减少眼睛疲劳(夜间模式)。Android官方从Support Library ...

    Android-Android主题换肤插件化换肤无缝切换

    "Android-Android主题换肤插件化换肤无缝切换"是一个专为Android应用程序设计的技术主题,它旨在实现动态的、插件化的皮肤更换,使得用户在不重启应用的情况下能够实现皮肤的平滑切换。以下是对这个主题的详细解释和...

    Android界面主题切换源码分享

    本资源提供的"Android界面主题切换源码分享"是一个实现Android应用主题切换的实例,可以帮助开发者深入理解如何在Android中实现实时的主题切换功能。 首先,Android中的主题和样式主要通过XML文件定义。在`res/...

    Android 主题之主题文件夹

    可以通过切换不同主题资源文件,或者在运行时动态设置`android:theme`属性来实现。 8. **主题最佳实践** - 保持主题简洁,避免过多的定制,以提高性能和兼容性。 - 使用颜色变量,方便统一修改主题颜色。 - 测试...

    android切换主题二

    本文将深入探讨如何在Android中实现主题切换并保存用户选择的主题,主要基于提供的标题“android切换主题二”和描述中的链接。我们将讨论以下几个关键知识点: 1. **Android 主题和样式**: - Android主题是应用于...

    Android 主题切换的一个Demo

    Android 主题切换的Demo,详细介绍请到:http://www.jianshu.com/users/6725c8e8194f。需要源码请到:https://github.com/burgessjp/MaterialDesignDemo

    Android 动态更换桌面图标

    每当双 11、12 来临之际,Android 手机 Launcher 中的淘宝、天猫图标就会变成双 11、12 主题的图标。该 Demo 就实现了动态切换图标、名称

Global site tag (gtag.js) - Google Analytics