软件换肤从功能上可以划分三种:
就像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>

分享到:
相关推荐
2. **定义主题切换函数**:创建一个函数,用于根据用户选择的主题动态切换。这个函数可能如下所示: ```java public void switchTheme(Context context, int themeId) { // 获取当前运行的Activity Activity ...
通过以上步骤,开发者可以实现Android应用的主题动态切换,从而提升用户体验,让他们可以根据个人喜好定制应用的外观。同时,这也是一种优化应用的方式,因为它允许用户在不卸载应用的情况下改变其视觉风格。
这篇博客“Android Style\\Theme动态切换”可能探讨了如何在Android应用程序中实现实时改变主题和样式的技巧。 首先,我们需要理解Android中的Theme和Style的基本概念。Theme是全局的,通常应用于整个应用程序或...
7. **主题动态加载** - 动态加载主题涉及到运行时更改应用的资源,可能需要重新创建Activity以应用新主题,这通常涉及更复杂的处理。 通过以上步骤,我们可以实现Android应用中多样化的主题风格,并轻松实现一键...
在Android平台上,开发一款能够动态切换桌面图标的App(Launcher)是一项有趣且实用的技术挑战。这个过程涉及到Android系统的启动器接口、图标资源管理以及用户界面的设计。以下将详细阐述实现这一功能所需的关键...
ThemeDemo日夜间模式切换,页面切换的时候附带动画特效, 关于多主题实现的,大牛这里的做法是继承AppCompatActivity,置换了AppCompatDelegate中...在解析以后会根据控件转换成支持主题切换的控件.解放冗余的名称.
本文将深入探讨如何在Android中实现主题切换功能。 一、理解Android主题 Android主题是在应用程序或活动中定义的一系列样式属性,这些属性可以影响到控件的外观,如按钮、文本框等。主题通常定义在res/values/...
"Android Studio 护眼主题打包"是指为Android Studio创建或配置一个能减轻眼睛疲劳的暗色或者低亮度主题,并将其打包以便在其他设备或系统上安装和使用。下面我们将深入探讨这一主题的各个方面。 首先,了解Android...
在Android平台上,为应用切换主题是一项常见的需求,可以提供个性化的用户体验。本篇文章将深入探讨如何通过apk皮肤的方式来实现这一功能。首先,我们要理解apk皮肤的本质:它实际上是一种可替换的应用资源包,包含...
在Android开发领域,Android Studio(AS)作为官方推荐的集成开发环境(IDE),其自定义主题功能极大地提升了开发者的工作效率和舒适度。本主题相关的压缩包文件包括"ladies night2.jar", "cobalt.jar", "visual ...
在Android开发中,UI界面的设计和交互是用户体验的关键部分,而动态切换主题是提升用户个性化体验的一个重要功能。本文将详细解析如何实现Android应用中切换主题的代码。 首先,我们需要理解Android中的主题(Theme...
本示例"android主题切换demo"将介绍如何通过编程方式实现在运行时切换应用的主题,从而为用户提供个性化的体验。 首先,我们需要在项目的res/values目录下创建不同的主题样式文件。例如,可以创建两个主题:`styles...
然而,在某些特定场景下,比如个性化定制、多品牌合作或者动态主题切换时,我们可能需要在应用运行时动态地改变应用的图标和名称。这就是“Android动态更换应用图标和应用名称”这一技术的核心所在。 在Android中,...
"Android夜间模式动态切换"这个话题主要关注如何在应用程序中实现实时改变界面颜色方案,以便用户可以在明亮环境下舒适地使用(日间模式)或者在暗环境中减少眼睛疲劳(夜间模式)。Android官方从Support Library ...
"Android-Android主题换肤插件化换肤无缝切换"是一个专为Android应用程序设计的技术主题,它旨在实现动态的、插件化的皮肤更换,使得用户在不重启应用的情况下能够实现皮肤的平滑切换。以下是对这个主题的详细解释和...
本资源提供的"Android界面主题切换源码分享"是一个实现Android应用主题切换的实例,可以帮助开发者深入理解如何在Android中实现实时的主题切换功能。 首先,Android中的主题和样式主要通过XML文件定义。在`res/...
可以通过切换不同主题资源文件,或者在运行时动态设置`android:theme`属性来实现。 8. **主题最佳实践** - 保持主题简洁,避免过多的定制,以提高性能和兼容性。 - 使用颜色变量,方便统一修改主题颜色。 - 测试...
本文将深入探讨如何在Android中实现主题切换并保存用户选择的主题,主要基于提供的标题“android切换主题二”和描述中的链接。我们将讨论以下几个关键知识点: 1. **Android 主题和样式**: - Android主题是应用于...
Android 主题切换的Demo,详细介绍请到:http://www.jianshu.com/users/6725c8e8194f。需要源码请到:https://github.com/burgessjp/MaterialDesignDemo
每当双 11、12 来临之际,Android 手机 Launcher 中的淘宝、天猫图标就会变成双 11、12 主题的图标。该 Demo 就实现了动态切换图标、名称