`
wangxinasy
  • 浏览: 19786 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

Android 主题切换功能

阅读更多
本文将介绍如何实现Android应用的换主题功能。假设一个简单的场景:有2套主题,一套绿色,一套黑色的。应用界面就一个按钮,每点击一下,按钮和背景都切换为不同的主题,如当前为黑色主题,下一次就为绿色主题,再下一次为黑色,以此类推。

打开Eclipse,新建三个Android工程项目,名字分别为BlackSkin、GreenSkin和MainSkin。BlackSkin和GreenSkin分别对应黑色、绿色主题资源,MainSkin为主应用。

BlackSkin
该工程下没有任何代码,只是在res\drawable目录下放置2张图片,一张黑色的背景,一张黑色的按钮图片。接着修改AndroidManifest.xml文件。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="1"
    android:versionName="1.0"
    package="net.toeach.blackskin"
    android:sharedUserId="net.toeach.MainSkin">
   
    <uses-sdk android:minSdkVersion="3" />

</manifest>







GreenSkin
与BlackSkin项目一样,该工程下也没有任何代码,只是在res\drawable目录下放置2张图片,一张绿色的背景,一张绿色的按钮图片。接着修改AndroidManifest.xml文件。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="1"
    android:versionName="1.0"
    package="net.toeach.greenskin"
    android:sharedUserId="net.toeach.mainskin">
   
    <uses-sdk android:minSdkVersion="3" />

</manifest>





















我们知道Android给每个APK进程分配一个单独的用户空间,其manifest中的userid就是对应一个Linux用户的(Android 系统是基于Linux)。所以不同APK(用户)间互相访问数据默认是禁止的,但是它也提供了2种APK间共享数据的形式:
1. Share Preference. / Content Provider
APK可以指定接口和数据给任何其他APK读取,需要自己实现接口和Share的数据.

2. Shared User id
通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中。所以默认就是可以互相访问任意数据。也可以配置成运行成不同的进程,同时可以访问其他APK的数据目录下的数据库和文件。就像访问本程序的数据一样。本文中的换主题功能就是通过这种方式来实现的。

MainSkin
该工程为主应用,我们新建立一个Activity类,叫MainActivity.java。代码如下:

public class MainActivity extends Activity {
  private LinearLayout showBg;
  private Button btn;
  private Context greenSkinContext = null;
  private Context blackSkinContext = null;
  int flag = 0;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    try {
     greenSkinContext = this.createPackageContext("net.toeach.greenskin", Context.CONTEXT_IGNORE_SECURITY);
     blackSkinContext = this.createPackageContext("net.toeach.blackskin", Context.CONTEXT_IGNORE_SECURITY);
    } catch (NameNotFoundException e) {
     e.printStackTrace();
    }
 
    showBg = (LinearLayout) findViewById(R.id.linear_layout_1);
    btn = (Button) findViewById(R.id.btn_change_skin);
    btn.setOnClickListener(new OnClickListener() {
     @Override
     public void onClick(View v) {
       if (flag == 0) {
         //访问GreenSkin下的资源
         showBg.setBackgroundDrawable(greenSkinContext.getResources().getDrawable(R.drawable.bg));
         btn.setBackgroundDrawable(greenSkinContext.getResources().getDrawable(R.drawable.btn_normal));
         flag = 1;
       } else if (flag == 1) {
         //访问BlackSkin下的资源
         showBg.setBackgroundDrawable(blackSkinContext.getResources().getDrawable(R.drawable.bg));
         btn.setBackgroundDrawable(blackSkinContext.getResources().getDrawable(R.drawable.btn_normal));
         flag = 0;
        }
     }
   });
}
}

分享到:
评论
3 楼 不知道yyj 2011-12-30  
运行不了!那个图片找不到
2 楼 ccy222 2011-12-12  
切不过来呀
1 楼 live17909 2011-04-11  
主工程报图片资源找不到呢。是不是还漏了哪里

相关推荐

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

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

    Android界面主题切换源码分享

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

    android 动态切换主题

    下面是一段示例代码,展示了如何在Activity中添加主题切换功能: ```java public class MainActivity extends AppCompatActivity { private static final String PREFS_NAME = "ThemePrefs"; private static ...

    android切换主题一(apk方式)

    总结,Android通过apk皮肤方式进行主题切换,不仅提供了丰富的个性化选项,也对开发者提出了挑战,要求他们具备良好的资源管理和代码组织能力。正确实现这一功能,不仅可以提升用户体验,也是展示技术实力的一个窗口...

    android自动切换图片

    在Android开发中,实现图片自动切换的功能是一项常见的需求,尤其在制作各种滑动展示、轮播图或广告栏等...实际开发中,开发者可以借鉴这个项目,结合自己的需求进行调整和优化,打造更加个性化的图片自动切换功能。

    Android-Android日夜间模式切换

    3. **Android Jetpack**:随着Android Jetpack的推出,动态主题切换变得更加简单。`LocalConfiguration`组件可以监听系统配置的变化,如亮度设置。当检测到变化时,可以通过`onConfigurationChanged()`方法更新UI。 ...

    android 界面切换效果

    本主题主要探讨的是如何在Android应用中实现Activity之间的平滑过渡效果。 首先,我们来了解一下Activity。Activity是Android应用程序的基本组件,它代表用户可以看到和与之交互的屏幕。在Android中,通常通过...

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

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

    主题切换android源代码

    在Android开发中,主题切换是一项重要的功能,它允许用户根据个人喜好改变应用的视觉样式。本文将深入探讨“主题切换”这一Android知识点,基于提供的源代码进行解析。 首先,我们来理解主题(Theme)在Android中的...

    Android切换界面皮肤代码

    你可以根据这些资源,结合以上步骤实现皮肤切换功能。 总的来说,实现Android界面皮肤切换涉及对Android资源管理机制的深入理解和代码的灵活运用。通过合理的设计和编程,可以让用户在不重启应用的情况下,享受到...

    android 日夜模式切换

    在Android应用开发中,日间模式与夜间模式的切换是一个重要的功能,特别是在追求用户体验和个性化设计的当下。本文将深入探讨如何使用Android Studio (AS) 实现这一功能,并结合一个名为"DayNightSample"的示例项目...

    android切换主题二

    - Android主题是应用于整个应用程序或特定Activity的全局样式。它们定义了颜色、字体、布局等视觉元素。 - 样式是更具体的定义,可以用于单个View或ViewGroup,通常包含在主题内。 2. **创建自定义主题**: - 在...

    android 5.0 切换主题,夜间模式

    综上所述,实现Android 5.0的夜间模式和主题切换功能需要对Material Design、主题系统以及动态资源管理有深入理解。通过合理的代码结构和设计,可以提供流畅且用户友好的体验。在提供的`SwitchThemeDemo`项目中,...

    Android 主题换肤框架

    通过以上介绍,我们可以了解到Android主题换肤框架如何帮助开发者轻松地实现应用程序的主题切换,同时提升用户体验。在实际开发中,结合具体需求进行适当的调整和优化,可以打造出更具吸引力的个性化应用。

    Android LayoutInflater.Factory主题切换

    通过设置`LayoutInflater`的Factory,我们可以控制每个View的创建过程,包括在创建前修改View的属性,例如颜色、字体等,这正是实现主题切换的关键。 以下是使用`LayoutInflater.Factory`实现主题切换的步骤: 1. ...

    Android机顶盒主题切换的设计与实现.pdf

    主题切换,即换肤功能,成为了提升用户体验的重要手段。然而,Android官方的主题API接口限制了主题化的程度,主要支持颜色、字体等基本元素的变更,而无法对图片、动画等更复杂的界面元素进行主题化处理。 文章中...

    SuperMap iMobile for Android 数据切换

    总结来说,SuperMap iMobile for Android的数据切换功能展示了其强大的兼容性和灵活性,无论是本地存储的专有格式数据,还是通过网络获取的Web GIS服务,甚至是第三方的在线地图服务,都能轻松应对。这种特性对于...

    Android开发实现切换主题及换肤功能示例

    主题切换功能可以让用户根据自己的喜好选择不同的主题样式,从而提高用户体验。 二、 ColorTheme类的实现 在本文中,我们定义了一个ColorTheme类,该类用于实现主题的切换。ColorTheme类中有两个方法:updateTheme...

    Android主题切换之探究白天和夜间模式

    Android主题切换是提升用户体验的重要功能,它允许用户根据个人喜好或环境光线条件选择适合的界面风格。在Android系统中,主题切换通常涉及颜色、布局、字体等视觉元素的变化,以适应白天或夜间模式。本文将深入探讨...

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

    5. **全局主题切换**: 如果希望全局切换主题,不仅限于当前Activity,那么可以考虑使用`SharedPreferences.OnSharedPreferenceChangeListener`监听主题变更,并在监听器中通知所有Activity进行主题更新。 通过...

Global site tag (gtag.js) - Google Analytics