Android 切换应用风格,夜间模式

加入SharedPreference标志,可以记忆上次选用的风格,从而下次启动时不必重置。

package com.zms.nightstyle;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class Main extends Activity {
    private boolean isNight = false;
    private Button btnSet;
    private Button btnGet;
    private SharedPreferences sharedPreferences;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        sharedPreferences = getSharedPreferences("UseStyle", Context.MODE_WORLD_READABLE);
        isNight = sharedPreferences.getBoolean("isNight", false);
        if (isNight) {
            this.setTheme(R.style.MyThemeNight);
        } else {
            this.setTheme(R.style.MyThemeDefault);
        }
        setContentView(R.layout.main);
        btnSet = (Button) findViewById(R.id.btnSet);
        btnGet = (Button) findViewById(R.id.btnGet);
        btnSet.setOnClickListener(new onClickListenerImp());
        btnGet.setOnClickListener(new onClickListenerImp());
    }

    class onClickListenerImp implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            if (v == btnSet) {
                Editor editor = sharedPreferences.edit();
                if (isNight) {
                    setTheme(R.style.MyThemeDefault);
                    isNight = false;
                } else {
                    setTheme(R.style.MyThemeNight);
                    isNight = true;
                }
                editor.putBoolean("isNight", isNight);
                editor.commit();

                setContentView(R.layout.main);
                btnSet = (Button) findViewById(R.id.btnSet);
                btnGet = (Button) findViewById(R.id.btnGet);
                btnSet.setOnClickListener(new onClickListenerImp());
                btnGet.setOnClickListener(new onClickListenerImp());
            } else if (v == btnGet) {
                Toast.makeText(Main.this, "isNight: " + isNight, Toast.LENGTH_SHORT).show();
            }
        }
    }
}

两种风格主题:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <!-- 默认主题 -->
    <style name="MyThemeDefault" parent="@android:style/Theme">
        <item name="btnColor">#00ff00</item>
        <item name="mainBackground">#ffffff</item>
        <item name="mainTextColor">#000000</item>
        <item name="textString">默认主题</item>
    </style>

    <!-- 夜间主题 -->
    <style name="MyThemeNight" parent="@android:style/Theme">
        <item name="btnColor">#0000ff</item>
        <item name="mainBackground">#000000</item>
        <item name="mainTextColor">#ffffff</item>
        <item name="textString">夜间主题</item>
    </style>

</resources>

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="?mainBackground"
    android:orientation="vertical">

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="?textString" />

    <ImageView
        android:id="@+id/ivBook"
        android:layout_width="62dip"
        android:layout_height="42dip"
        android:layout_gravity="center"
        android:layout_marginTop="0dip"
        android:gravity="center"
        android:src="?btnColor" />

    <Button
        android:id="@+id/btnSet"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        android:text="改变主题" />

    <Button
        android:id="@+id/btnGet"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        android:text="Get Flag" />

</LinearLayout>

转载请注明出处:周木水的CSDN博客 http://blog.csdn.net/zhoumushui

我的GitHub:周木水的GitHub https://github.com/zhoumushui

时间: 2024-10-26 11:07:58

Android 切换应用风格,夜间模式的相关文章

Android 高级UI设计笔记23:Android 夜间模式之 两种常用方法(降低屏幕亮度+替换theme)

1. 夜间模式 所谓的夜间模式,就是能够根据不同的设定,呈现不同风格的界面给用户,而且晚上看着不伤眼睛.特别是一些新闻类App实现夜间模式是非常人性化的,增强用户体验. 2. 我根据网上的资料 以及自己代码亲测,总结如下两种方法: (1)降低屏幕亮度 (2)替换theme 3. 夜间模式之 降低屏幕亮度: (1)创建一个Android工程,命名为"夜间模式_利用屏幕亮度(App)",如下: (2)首先我们来到主布局之中,如下: 1 <LinearLayout xmlns:andr

Android夜间模式实现

查看我的全部开源项目[开源实验室] 欢迎加入我的QQ群:[201055521],本博客客户端下载[请点击] 本文原创,转载请注明地址:http://blog.kymjs.com/ 最近在做一个Android夜间模式的功能,又重新研究了一下Theme机制.贯彻我的风格,以解决问题为目标,写了个小Demo,简单了实现了切换夜间模式,为大家讲解. 在Activity中有一个方法叫setTheme(),可以设置Activity的Theme,当然Application类中也有相同的方法,也可以在Appli

Android应用开发中的夜间模式实现(一)

前言 在应用开发中会经常遇到要求实现夜间模式或者主题切换具体例子如下,我会先讲解第一种方法. 夜间模式 知乎 网易新闻 沪江开心词场 Pocket 主题切换 腾讯QQ 新浪微博 我今天主要是详述第一种的实现方式: 首先,应用的Application要继承自定义的Theme 1 2 3 4 5 6 <application android:allowBackup="true" android:icon="@drawable/ic_launcher" androi

【android】夜间模式简单实现

关于阅读类的app,有个夜间模式真是太重要了. 那么有两种方式可以实现夜间模式 1:修改theme,重启activity 优点:正儿八经的夜间模式,配色看着舒服 缺点:图片刺眼.闪屏 2:使用一个带黑色带透明度的View,盖在现有的activity上,效果类似你带上墨镜,看着太阳不刺眼. 优点:不用重启activity,不闪屏:加上透明度过渡动画,模式之间切换非常舒服,解决了1中,白底图片依旧刺眼的问题.: 缺点:配色没变化,就算带上墨镜,白天依旧是白天. 因此,本方案整合了两种解决方案.在夜间

三行代码实现白天夜间模式流畅切换的实现库

Usage xml android:background= ?attr/zzbackground app:backgroundAttr= zzbackground //如果当前页面要立即刷新,这里传入属性名称 比如R.attr.zzbackground 传zzbackground即可 android:textColor= ?attr/zztextColor app:textColorAttr= zztextColor // 演示效果 Usage xml android:background="?

android简单的夜间模式

现在android项目values下打 attrs.xml <?xml version="1.0" encoding="utf-8"?> <resources> <attr name="bookimage" format="reference|color" /> <attr name="tvcolor" format="reference|color&qu

Android 之夜间模式(多主题)的实现思路

实现思路 多数App由于历史原因当对其进行夜间模式的功能改造时,工作量是比较大的,所以在真正开始着手实现前,我们还是应该先明确夜间模式(多主题)到底有多少实现的思路以及它们的优劣,这样才可以有效的避免项目延期的情况出现. 自定义attr属性. 这是最基础的方法,就是通过自定义attr属性,在不同的theme中进行不同的实现,然后在layout和style中调用.这种方法改代码改动量比较大,而且根据不同的主题,drawable(5.0以上不用),selector等xml文件必须要相应的定义多份,因

开源中国源码学习(五)——切换皮肤(日间模式和夜间模式)

在开源中国客户端源码的侧滑菜单栏里有一个模式切换的选项,可以完成夜间模式和日间模式的相互转换. 一.功能介绍 在侧滑菜单栏里点击日间或者夜间后,客户端的皮肤可以发生变化,来达到保护眼睛的作用. 二.详细介绍 这是在MainActivity的onCreate方法中的一段代码,这段代码完成了读取本地配置中存储的日间模式和夜间模式信息,从而回显到客户端中. 读取本地配置信息,在应用启动时,回显至客户端 @Override protected void onCreate(Bundle savedInst

Android 高级UI设计笔记24:Android 夜间模式之 WebView 实现白天 / 夜间阅读模式 (使用JavaScript)

1. 问题引入: 前面我们是使用方法 降低屏幕亮度(不常用) 和 替换theme,两者都是针对Activity的背景进行白天.夜间模式的交换,但是如果我们显示的是Html的内容,这个时候改怎么办? 分析:首先加载Html页面肯定是要用到WebView的,通过loadUrl的方法可以把html页面显示到webView,我们知道Android可以与JavaScript进行交互,就是说可以在JavaScript中调用Android的代码,也可以在Android中调用JavaScript代码. 所以就有