切换白天黑夜模式

         在开发中,会有一个这样的效果实现,为了保护使用者的眼睛,提高应用的使用形,可以设置一下切换白天或者黑夜模式,这里介绍一种很简单的实现方法,它的最终实现效果是这样的


效果图:




不知道这个效果图有没有吸引到你们,现在一起进入到这个画面的学习中。


src-main-res-velues-styles


<resources>

    <!-- .白天模式的样式 -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    </style>
    <!-- 夜间模式的样式. -->
    <style name="AppThemeDark" parent="Theme.AppCompat"></style>

</resources>


src-main-res-layout


<Button
    android:id="@+id/but"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="切换夜间模式"
    />


src-main-java-创建一个Utils类


package com.example.baitianheiye;

import android.content.Context;



public class Utils {
    //获取主题,根据给定的值来判断是夜间还是黑夜
    public  static int getAppTheme(Context context){
        //theme取出
        String value = SharedPreferrenceHelper.getTheme(context);
        //判断theme转为int类型的值
        switch (Integer.valueOf(value)){
            case 1:
                //白天的主题
                return R.style.AppTheme;
            case 2:
                //夜间的主题
                return R.style.AppThemeDark;
            default:
                //默认白天
                return R.style.AppTheme;
        }
    }
    //更改主题,当为白天时将给定的值改成黑夜,为黑夜反之
    public static void switchAppTheme(Context context){
        String value = SharedPreferrenceHelper.getTheme(context);
        switch (Integer.valueOf(value)){
            case 1:
                //当为白天时调用这个方法变成黑夜
                SharedPreferrenceHelper.setTheme(context,"2");
                break;
            case 2:
                //当为黑夜时调用这个方法变成白天
                SharedPreferrenceHelper.setTheme(context,"1");
                break;
            default:
                //默认为白天
                SharedPreferrenceHelper.setTheme(context,"1");
                break;
        }
    }
}

src-main-java-创建一个SharedPreferrenceHelper类


package com.example.baitianheiye;

import android.content.Context;
import android.content.SharedPreferences;


public class SharedPreferrenceHelper {
    //theme(主题)
    private static final String THEME = "theme";
    //更改主题,传入两个参数,一个上下文,一个theme(主题)
    public static void setTheme(Context context, String theme) {
        SharedPreferences sharedPreferences = context.getSharedPreferences("theme", Context.MODE_PRIVATE);
        //theme(主题)存入SharedPreferences
        sharedPreferences.edit().putString(THEME, theme).apply();
    }
    //取出主题
    public static String getTheme(Context context) {
        SharedPreferences sharedPreferences = context.getSharedPreferences("theme", Context.MODE_PRIVATE);
        //取出theme(主题)
        return sharedPreferences.getString(THEME, "1");
    }
}

MainActivity中


package com.example.baitianheiye;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private int theme = 0;
    private Button but;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        theme = Utils.getAppTheme(this);
        setTheme(theme);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        if(theme==R.style.AppThemeDark){
            but.setText("切换为白天模式");
        }else if(theme==R.style.AppTheme){
            but.setText("切换为夜间模式");
        }
    }
    private void initView() {
        but = (Button) findViewById(R.id.but);
        but.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.but:
                Utils.switchAppTheme(this);
                Intent intent = getIntent();
                overridePendingTransition(0, 0);//不设置进入退出动画
                intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                finish();
                overridePendingTransition(0, 0);
                startActivity(intent);
                break;
        }
    }
}

如此,便可以做出一个白天黑夜相切换的效果,拿走,不谢噢。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值