夜间模式方法之套一层蒙版

public class NightModeUtils {
	 public final static int THEME_SUN = 1;
	 public final static int THEME_NIGHT = 2;
//	 public final static boolean cheched = false;
//	 public static int getSwitchDayNightMode(Context context) {
//	        int mode = getDayNightMode(context);
//	        return mode == THEME_SUN ? THEME_NIGHT : THEME_SUN;
//	    }
//	 public static int getDayNightMode(Context context) {
//	        SharedPreferences sharedPreferences = getSharedPreferences(context);
//	        return sharedPreferences.getInt("SUN_NIGHT_MODE", THEME_SUN);
//	    }
//	 private static SharedPreferences getSharedPreferences(Context context) {
//	        return context.getSharedPreferences("NightModeDemo", Context.MODE_APPEND);
//	    }
	 public static void onActivityCreateSetTheme(Activity activity) {
		 boolean checked = (Boolean) SpUtils.get(activity, "night_day", true);
	        if (checked) {
	        	activity.setTheme(R.style.AppSunTheme);
			}else {
				activity.setTheme(R.style.AppNightTheme);
			}
	    }
}

上面是选择style中的两种模式的工具类

 <RelativeLayout 
                android:layout_width="match_parent"
                android:layout_height="@dimen/pad_height_50" >
                <TextView
                android:id="@+id/night_mode_tv"
                android:layout_width="match_parent"
                android:layout_height="@dimen/pad_height_50"
                android:layout_centerVertical="true"
                 android:layout_marginLeft="@dimen/pad_height_10"
                android:layout_marginRight="@dimen/pad_height_3"
                android:padding="@dimen/pad_height_10"
                android:gravity="center_vertical"
                android:drawableLeft="@drawable/yejian"
                android:drawablePadding="@dimen/pad_height_10"
                android:text="夜间模式"
                style="@style/subtitle_text" />

            <com.hipad.news.view.UISwitchButton
	            xmlns:switch="http://schemas.android.com/apk/res-auto"
	            android:id="@+id/night_mode_switch_one"
	            android:layout_width="wrap_content"
	            android:layout_height="wrap_content"
	            android:layout_alignParentRight="true"
	            android:layout_centerVertical="true"
	            android:padding="@dimen/pad_height_10"
                android:gravity="center_vertical"
	            switch:bmHeight="50000dp"
	            switch:bmWidth="@dimen/pad_height_40" />
            </RelativeLayout>
添加switch选择按钮布局

night_mode_switch = (UISwitchButton) view.findViewById(R.id.night_mode_switch_one);
		boolean checked = (Boolean) SpUtils.get(getActivity(), "night_day", true);
		night_mode_switch.setChecked(checked);
		night_mode_switch.setOnCheckedChangeListener(new OnCheckedChangeListener() {
			@Override
			public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
				if (isChecked) {
					SpUtils.put(getActivity(), "night_day", true);
					Log.d("zhsy", "night==");
					night();
				} else {
					SpUtils.put(getActivity(), "night_day", false);
					Log.d("zhsy", "day==");
					day();
				}
			}
		});
对选择按钮控件的监听

	private void night() {
		if (mNightView == null) {
			mNightView = new TextView(getActivity());
			mNightView.setBackgroundColor(0xaa000000);
		}

		WindowManager.LayoutParams lp = new WindowManager.LayoutParams(LayoutParams.MATCH_PARENT,
				LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.TYPE_APPLICATION,
				WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
				PixelFormat.TRANSLUCENT);
		lp.gravity = Gravity.BOTTOM;
		lp.y = 10;
		try {
			mWindowManager.addView(mNightView, lp);
		} catch (Exception ex) {
		}
	}

	private void day() {
		try {
			mWindowManager.removeView(mNightView);
		} catch (Exception ex) {
		}
	}
通过WindowManager控制蒙版的添加和删除来模拟夜间和白天的模式

NightModeUtils.onActivityCreateSetTheme(getActivity());




在oncreate方法中调用控制切换主题的方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值