夜间模式UI调整
This commit is contained in:
@@ -38,9 +38,11 @@ import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.AppCompatDelegate;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.viewbinding.ViewBinding;
|
||||
|
||||
import com.ckkj.water.utils.manager.ThemeManager;
|
||||
import com.esafirm.imagepicker.features.ImagePicker;
|
||||
import com.hjq.permissions.OnPermissionCallback;
|
||||
import com.hjq.permissions.XXPermissions;
|
||||
@@ -104,6 +106,7 @@ public abstract class BaseActivity<T extends ViewBinding, P extends IPresenter>
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
applyTheme();
|
||||
super.onCreate(savedInstanceState);
|
||||
try {
|
||||
EventBus.getDefault().register(this);
|
||||
@@ -134,6 +137,13 @@ public abstract class BaseActivity<T extends ViewBinding, P extends IPresenter>
|
||||
initData(savedInstanceState);
|
||||
}
|
||||
|
||||
/**
|
||||
* 所有Activity主题一致
|
||||
*/
|
||||
protected void applyTheme() {
|
||||
int nightMode = ThemeManager.getCurrentTheme(this);
|
||||
AppCompatDelegate.setDefaultNightMode(nightMode);
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化窗口
|
||||
|
||||
@@ -22,6 +22,7 @@ import com.ckkj.water.device.mvp.DeviceContract;
|
||||
import com.ckkj.water.device.mvp.DeviceImpl;
|
||||
import com.ckkj.water.device.mvp.DevicePresenter;
|
||||
import com.ckkj.water.network.BaseBean;
|
||||
import com.ckkj.water.utils.manager.ThemeManager;
|
||||
import com.ckkj.water.utils.show.ToastUtil;
|
||||
import com.gyf.immersionbar.ImmersionBar;
|
||||
import com.maning.mlkitscanner.scan.MNScanManager;
|
||||
@@ -49,8 +50,8 @@ public class AddDeviceActivity extends BaseActivity<AddDeviceLayoutBinding, Devi
|
||||
public void initData(Bundle savedInstanceState) {
|
||||
super.initData(savedInstanceState);
|
||||
ImmersionBar.with(this)
|
||||
.statusBarColor(R.color.color_F9F9F9) // 设置状态栏颜色
|
||||
.statusBarDarkFont(true) // 设置状态栏字体为黑色
|
||||
.statusBarColor(R.color.mainBackgroundColor) // 设置状态栏颜色
|
||||
.statusBarDarkFont(ThemeManager.isAppThemeLight(mContext)) // 设置状态栏字体为黑色
|
||||
.titleBar(viewBinding.rlTitle)
|
||||
.init();
|
||||
viewBinding.includedTitle.tvTitle.setText(R.string.add_device_title);
|
||||
|
||||
@@ -51,7 +51,7 @@ public class DeviceControlActivity extends BaseActivity<DeviceControlLayoutBindi
|
||||
mTimeList.add("3h");
|
||||
mTimeList.add("4h");
|
||||
ImmersionBar.with(this)
|
||||
.statusBarColor(R.color.color_F9F9F9) // 设置状态栏颜色
|
||||
.statusBarColor(R.color.mainBackgroundColor) // 设置状态栏颜色
|
||||
.statusBarDarkFont(true) // 设置状态栏字体为黑色
|
||||
.titleBar(viewBinding.rlTitle)
|
||||
.init();
|
||||
|
||||
@@ -24,6 +24,7 @@ import com.ckkj.water.device.mvp.DeviceContract;
|
||||
import com.ckkj.water.device.mvp.DeviceImpl;
|
||||
import com.ckkj.water.device.mvp.DevicePresenter;
|
||||
import com.ckkj.water.network.BaseBean;
|
||||
import com.ckkj.water.utils.manager.ThemeManager;
|
||||
import com.ckkj.water.utils.show.ToastUtil;
|
||||
import com.ckkj.water.utils.text.TextUtil;
|
||||
import com.gyf.immersionbar.ImmersionBar;
|
||||
@@ -78,8 +79,8 @@ public class SelectWifiActivity extends BaseActivity<DeviceResetWifiBinding, Dev
|
||||
}
|
||||
|
||||
ImmersionBar.with(this)
|
||||
.statusBarColor(R.color.color_F9F9F9)
|
||||
.statusBarDarkFont(true)
|
||||
.statusBarColor(R.color.mainBackgroundColor)
|
||||
.statusBarDarkFont(ThemeManager.isAppThemeLight(mContext))
|
||||
.titleBar(viewBinding.rlTitle)
|
||||
.init();
|
||||
if(WITCH_FROM_CODE == 200){
|
||||
|
||||
@@ -41,6 +41,7 @@ public class LaunchActivity extends BaseActivity<GuideLayoutBinding, MainPresent
|
||||
super.initData(savedInstanceState);
|
||||
viewBinding.includeTitle.imgBack.setVisibility(View.GONE);
|
||||
viewBinding.includeTitle.tvTitle.setVisibility(View.GONE);
|
||||
viewBinding.includeTitle.relativeTitle.setBackgroundColor(mContext.getColor(R.color.white));
|
||||
ImmersionBar.with(this)
|
||||
.statusBarColor(R.color.white)
|
||||
.statusBarDarkFont(true)
|
||||
|
||||
@@ -16,6 +16,7 @@ import com.ckkj.water.network.BaseBean;
|
||||
import com.ckkj.water.plan.BindDeviceFragment;
|
||||
import com.ckkj.water.plan.WaterConfigFragment;
|
||||
import com.ckkj.water.plate.adapter.ViewPagerAdapter;
|
||||
import com.ckkj.water.utils.manager.ThemeManager;
|
||||
import com.gyf.immersionbar.ImmersionBar;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -31,8 +32,8 @@ public class HistoryFragment extends BaseFragment<HistoryFragmentLayoutBinding,
|
||||
@Override
|
||||
public void initData(Bundle state) {
|
||||
ImmersionBar.with(mContext)
|
||||
.statusBarColor(R.color.white)
|
||||
.statusBarDarkFont(true)
|
||||
.statusBarColor(R.color.mainBackgroundColor)
|
||||
.statusBarDarkFont(ThemeManager.isAppThemeLight(mContext))
|
||||
.titleBar(viewBinding.rlTitle)
|
||||
.init();
|
||||
viewBinding.includedTitle.imgBack.setVisibility(INVISIBLE);
|
||||
|
||||
@@ -16,6 +16,7 @@ import com.ckkj.water.history.HistoryFragment;
|
||||
import com.ckkj.water.index.IndexFragment;
|
||||
import com.ckkj.water.mine.MineCenterFragment;
|
||||
import com.ckkj.water.plan.WaterPlanFragment;
|
||||
import com.ckkj.water.utils.manager.ThemeManager;
|
||||
import com.gyf.immersionbar.ImmersionBar;
|
||||
import com.ckkj.water.AppConfig;
|
||||
import com.ckkj.water.ConstantUtil;
|
||||
@@ -152,26 +153,21 @@ public class MainActivity extends BaseActivity<MainActivityLayoutBinding, MainPr
|
||||
case 1:
|
||||
viewBinding.navView.getMenu().getItem(position).setChecked(true);
|
||||
viewBinding.navView.setSelectedItemId(R.id.navigation_plan);
|
||||
// 其他页面恢复白色状态栏
|
||||
ImmersionBar.with(MainActivity.this)
|
||||
.statusBarColor(R.color.white)
|
||||
.statusBarDarkFont(true)
|
||||
.init();
|
||||
break;
|
||||
case 2:
|
||||
viewBinding.navView.getMenu().getItem(position).setChecked(true);
|
||||
viewBinding.navView.setSelectedItemId(R.id.navigation_history);
|
||||
ImmersionBar.with(MainActivity.this)
|
||||
.statusBarColor(R.color.white)
|
||||
.statusBarDarkFont(true)
|
||||
.statusBarColor(R.color.mainBackgroundColor)
|
||||
.statusBarDarkFont(ThemeManager.isAppThemeLight(mContext))
|
||||
.init();
|
||||
break;
|
||||
case 3:
|
||||
viewBinding.navView.getMenu().getItem(position).setChecked(true);
|
||||
viewBinding.navView.setSelectedItemId(R.id.navigation_mine);
|
||||
ImmersionBar.with(MainActivity.this)
|
||||
.statusBarColor(R.color.white)
|
||||
.statusBarDarkFont(true)
|
||||
.statusBarColor(R.color.mainBackgroundColor)
|
||||
.statusBarDarkFont(ThemeManager.isAppThemeLight(mContext))
|
||||
.init();
|
||||
break;
|
||||
}
|
||||
@@ -192,13 +188,12 @@ public class MainActivity extends BaseActivity<MainActivityLayoutBinding, MainPr
|
||||
|
||||
case R.id.navigation_plan:
|
||||
viewBinding.navViewpage2.setCurrentItem(1);
|
||||
|
||||
return true;
|
||||
|
||||
case R.id.navigation_history:
|
||||
viewBinding.navViewpage2.setCurrentItem(2);
|
||||
ImmersionBar.with(MainActivity.this)
|
||||
.statusBarColor(R.color.white)
|
||||
.statusBarColor(R.color.mainBackgroundColor)
|
||||
.statusBarDarkFont(true)
|
||||
.init();
|
||||
return true;
|
||||
@@ -206,7 +201,7 @@ public class MainActivity extends BaseActivity<MainActivityLayoutBinding, MainPr
|
||||
case R.id.navigation_mine:
|
||||
viewBinding.navViewpage2.setCurrentItem(3);
|
||||
ImmersionBar.with(MainActivity.this)
|
||||
.statusBarColor(R.color.white)
|
||||
.statusBarColor(R.color.mainBackgroundColor)
|
||||
.statusBarDarkFont(true)
|
||||
.init();
|
||||
return true;
|
||||
|
||||
95
app/src/main/java/com/ckkj/water/mine/AppThemActivity.java
Normal file
95
app/src/main/java/com/ckkj/water/mine/AppThemActivity.java
Normal file
@@ -0,0 +1,95 @@
|
||||
package com.ckkj.water.mine;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
|
||||
import com.ckkj.water.R;
|
||||
import com.ckkj.water.base.BaseActivity;
|
||||
import com.ckkj.water.databinding.AppThemeChangeLayoutBinding;
|
||||
import com.ckkj.water.mine.mvp.MineContract;
|
||||
import com.ckkj.water.mine.mvp.MineImpl;
|
||||
import com.ckkj.water.mine.mvp.MinePresenter;
|
||||
import com.ckkj.water.network.BaseBean;
|
||||
import com.ckkj.water.utils.manager.ThemeManager;
|
||||
import com.gyf.immersionbar.ImmersionBar;
|
||||
|
||||
/**
|
||||
* @author fengxiaoyang
|
||||
* @date 2026/5/17
|
||||
* @description TODO: 切换主题
|
||||
*/
|
||||
public class AppThemActivity extends BaseActivity<AppThemeChangeLayoutBinding, MinePresenter>
|
||||
implements MineContract.MineView {
|
||||
|
||||
@Override
|
||||
public void initData(Bundle savedInstanceState) {
|
||||
super.initData(savedInstanceState);
|
||||
|
||||
ImmersionBar.with(this)
|
||||
.statusBarColor(R.color.transparent) // 设置状态栏颜色
|
||||
.statusBarDarkFont(true) // 设置状态栏字体为黑色
|
||||
.titleBar(viewBinding.rlTitle)
|
||||
.init();
|
||||
viewBinding.includedTitle.tvTitle.setText(R.string.register_title);
|
||||
initListener();
|
||||
int currentTheme = ThemeManager.getCurrentTheme(mContext);
|
||||
if(currentTheme == ThemeManager.MODE_LIGHT){
|
||||
viewBinding.checkNight.setChecked(false);
|
||||
viewBinding.checkLight.setChecked(true);
|
||||
}else{
|
||||
viewBinding.checkNight.setChecked(true);
|
||||
viewBinding.checkLight.setChecked(false);
|
||||
}
|
||||
}
|
||||
|
||||
private void initListener() {
|
||||
setClick(viewBinding.includedTitle.imgBack);
|
||||
setClick(viewBinding.linearLight);
|
||||
setClick(viewBinding.linearNight);
|
||||
}
|
||||
|
||||
private void setClick(View view) {
|
||||
view.setOnClickListener(this::onClick);
|
||||
}
|
||||
|
||||
public void onClick(View v){
|
||||
switch (v.getId()){
|
||||
case R.id.linear_light:
|
||||
switchTheme(ThemeManager.MODE_LIGHT);
|
||||
viewBinding.checkNight.setChecked(false);
|
||||
viewBinding.checkLight.setChecked(true);
|
||||
break;
|
||||
case R.id.linear_night:
|
||||
switchTheme(ThemeManager.MODE_DARK);
|
||||
viewBinding.checkNight.setChecked(true);
|
||||
viewBinding.checkLight.setChecked(false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void switchTheme(int themeMode) {
|
||||
ThemeManager.setCurrentTheme(this, themeMode);
|
||||
ThemeManager.applyTheme(themeMode);
|
||||
recreate(); // 需要重新创建Activity使主题生效
|
||||
}
|
||||
|
||||
@Override
|
||||
public MinePresenter createPresenter() {
|
||||
return new MinePresenter(new MineImpl());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getLayoutResId(Bundle savedInstanceState) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showError(String message) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void logOut(BaseBean bean) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,7 @@ import com.ckkj.water.mine.mvp.MineContract;
|
||||
import com.ckkj.water.mine.mvp.MineImpl;
|
||||
import com.ckkj.water.mine.mvp.MinePresenter;
|
||||
import com.ckkj.water.network.BaseBean;
|
||||
import com.ckkj.water.utils.manager.ThemeManager;
|
||||
import com.ckkj.water.utils.show.ToastUtil;
|
||||
import com.gyf.immersionbar.ImmersionBar;
|
||||
import com.lxj.xpopup.XPopup;
|
||||
@@ -33,8 +34,8 @@ public class MineCenterFragment extends BaseFragment<MineFragmentLayoutBinding,
|
||||
@Override
|
||||
public void initData(Bundle state) {
|
||||
ImmersionBar.with(mContext)
|
||||
.statusBarColor(R.color.white)
|
||||
.statusBarDarkFont(true)
|
||||
.statusBarColor(R.color.mainBackgroundColor)
|
||||
.statusBarDarkFont(ThemeManager.isAppThemeLight(mContext))
|
||||
.titleBar(viewBinding.rlTitle)
|
||||
.init();
|
||||
viewBinding.includedTitle.imgBack.setVisibility(INVISIBLE);
|
||||
@@ -46,6 +47,7 @@ public class MineCenterFragment extends BaseFragment<MineFragmentLayoutBinding,
|
||||
setClick(viewBinding.imgAvatar);
|
||||
setClick(viewBinding.linearLanguage);
|
||||
setClick(viewBinding.linearPsdManage);
|
||||
setClick(viewBinding.linearTheme);
|
||||
}
|
||||
|
||||
private void setClick(View view) {
|
||||
@@ -58,6 +60,10 @@ public class MineCenterFragment extends BaseFragment<MineFragmentLayoutBinding,
|
||||
goTo(mContext, MineInfomationActivity.class,null);
|
||||
break;
|
||||
|
||||
case R.id.linear_theme:
|
||||
goTo(mContext, AppThemActivity.class,null);
|
||||
break;
|
||||
|
||||
case R.id.linear_language:
|
||||
new XPopup.Builder(mContext).asBottomList(
|
||||
"选择语言",
|
||||
|
||||
@@ -16,6 +16,7 @@ import com.ckkj.water.plan.entity.WaterPlanWeekEntity;
|
||||
import com.ckkj.water.plan.mvp.WaterPlanContract;
|
||||
import com.ckkj.water.plan.mvp.WaterPlanImpl;
|
||||
import com.ckkj.water.plan.mvp.WaterPlanPresenter;
|
||||
import com.ckkj.water.utils.manager.ThemeManager;
|
||||
import com.google.gson.Gson;
|
||||
import com.gyf.immersionbar.ImmersionBar;
|
||||
|
||||
@@ -34,8 +35,8 @@ public class WaterPlanFragment extends BaseFragment<WaterPlanFragmentBinding, Wa
|
||||
mDevList = entity.getDeviceList();
|
||||
|
||||
ImmersionBar.with(mContext)
|
||||
.statusBarColor(R.color.white)
|
||||
.statusBarDarkFont(true)
|
||||
.statusBarColor(R.color.mainBackgroundColor)
|
||||
.statusBarDarkFont(ThemeManager.isAppThemeLight(mContext))
|
||||
.titleBar(viewBinding.rlTitle)
|
||||
.init();
|
||||
viewBinding.includedTitle.imgBack.setVisibility(INVISIBLE);
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.ckkj.water.utils.manager;
|
||||
|
||||
/**
|
||||
* @author fengxiaoyang
|
||||
* @date 2026/5/17
|
||||
* @description TODO: 描述该类的作用
|
||||
*/
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import androidx.appcompat.app.AppCompatDelegate;
|
||||
|
||||
public class ThemeManager {
|
||||
public static final String PREF_NAME = "theme_preferences";
|
||||
public static final String KEY_THEME_MODE = "theme_mode";
|
||||
|
||||
public static final int MODE_FOLLOW_SYSTEM = AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM;
|
||||
public static final int MODE_LIGHT = AppCompatDelegate.MODE_NIGHT_NO;
|
||||
public static final int MODE_DARK = AppCompatDelegate.MODE_NIGHT_YES;
|
||||
|
||||
public static void setCurrentTheme(Context context, int themeMode) {
|
||||
SharedPreferences pref = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
|
||||
pref.edit().putInt(KEY_THEME_MODE, themeMode).apply();
|
||||
}
|
||||
|
||||
public static int getCurrentTheme(Context context) {
|
||||
SharedPreferences pref = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
|
||||
return pref.getInt(KEY_THEME_MODE, MODE_FOLLOW_SYSTEM);
|
||||
}
|
||||
|
||||
public static boolean isAppThemeLight(Context context){
|
||||
boolean isLight = false;
|
||||
SharedPreferences pref = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
|
||||
int code = pref.getInt(KEY_THEME_MODE, MODE_FOLLOW_SYSTEM);
|
||||
if(code == AppCompatDelegate.MODE_NIGHT_NO){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void applyTheme(int themeMode) {
|
||||
AppCompatDelegate.setDefaultNightMode(themeMode);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user