日间和夜间效果的更换

本文介绍了一个简单的Android应用程序如何实现主题切换功能,包括日间和夜间模式。通过在styles.xml中定义不同主题,并利用SharedPreferences存储当前主题状态,再配合实用工具类进行主题切换,最后通过MainActivity实现了主题的动态加载及切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了简单在这里我们使用继承自Theme.AppCompat.Light.DarkActionBar的主题样式来代替日间模式。
作者:@JohnTsai
本文为作者原创,转载请注明出处:https://www.cnblogs.com/JohnTsai/p/4550144.html

详情看原贴 ㊣↑↑↑↑↑↑

简单应用:

styles.xml:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
    <!--夜间-->
    <style name="AppThemeDark" parent="Theme.AppCompat">

    </style>

</resources>

Utils 工具类:

public class Utils {
//    保存主题到本地
    public static class SharedPreferrenceHelper {
        private static final String THEME = "theme";
        public static void settheme(Context context, String theme){
            SharedPreferences sp = context.getSharedPreferences("demo",Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = sp.edit();
            editor.putString(THEME,theme);
            editor.apply();
        }
        public static String gettheme(Context context){
            SharedPreferences sp = context.getSharedPreferences("demo",Context.MODE_PRIVATE);
            return sp.getString(THEME,"1");
        }
    }

//    获得应用主题
    public static int getAppTheme(Context context){
        String value = SharedPreferrenceHelper.gettheme(context);
        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;
        }
    }

}

Main界面:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {


    private int theme = 0;
    /**
     * 切换
     */
    private Button mBtn;

//    判断当前主题
    @Override
    protected void onResume() {
        super.onResume();
        if (theme == Utils.getAppTheme(this)) {

        } else {
            reload();
        }
    }

//    存储主题状态
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("theme", theme);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
//        选择主题状态
        if (savedInstanceState == null) {
            theme = Utils.getAppTheme(this);
        } else {
            theme = savedInstanceState.getInt("theme");
        }
 //        设置主题
        setTheme(theme);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }


    //    重新生成activity,切换主题
    public void reload() {
        Intent intent = getIntent();
        overridePendingTransition(0, 0);//不设置进入退出动画
        intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
        finish();

        overridePendingTransition(0, 0);
        startActivity(intent);
    }


    private void initView() {
        mBtn = (Button) findViewById(R.id.btn);
        mBtn.setOnClickListener(this);
    }
//    点击事件,切换主题
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            default:
                break;
            case R.id.btn:
                Utils.switchAppTheme(this);
                reload();
                break;
        }
    }

}

解决闪屏问题-加入切换动画:

anim文件:—–
start_anim.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha
        android:duration="500"
        android:fromAlpha="0.0"
        android:toAlpha="1.0"/>
</set>

out_anim.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha
        android:duration="500"
        android:fromAlpha="1.0"
        android:toAlpha="0.0"/>
</set>

// 加入动画

  //    重新生成activity,切换主题
    public void reload() {
        Intent intent = getIntent();
        //设置进入动画
        overridePendingTransition(R.anim.start_anim, R.anim.out_anim);

        intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
        finish();

    //设置进入动画
        overridePendingTransition(R.anim.start_anim, R.anim.out_anim);
        startActivity(intent);
    }
内容概要:本文详细介绍了如何利用Simulink进行自动代码生成,在STM32平台上实现带57次谐波抑制功能的霍尔场定向控制(FOC)。首先,文章讲解了所需的软件环境准备,包括MATLAB/Simulink及其硬件支持包的安装。接着,阐述了构建永磁同步电机(PMSM)霍尔FOC控制模型的具体步骤,涵盖电机模型、坐标变换模块(如ClarkPark变换)、PI调节器、SVPWM模块以及用于抑制特定谐波的陷波器的设计。随后,描述了硬件目标配置、代码生成过程中的注意事项,以及生成后的C代码结构。此外,还讨论了霍尔传感器的位置估算、谐波补偿器的实现细节、ADC配置技巧、PWM死区时间换相逻辑的优化。最后,分享了一些实用的工程集成经验,并推荐了几篇有助于深入了解相关技术优化控制效果的研究论文。 适合人群:从事电机控制系统开发的技术人员,尤其是那些希望掌握基于Simulink的自动代码生成技术,以提高开发效率控制精度的专业人士。 使用场景及目标:适用于需要精确控制永磁同步电机的应用场合,特别是在面对高次谐波干扰导致的电流波形失真问题时。通过采用文中提供的解决方案,可以显著改善系统的稳定性性能,降低噪声水平,提升用户体验。 其他说明:文中不仅提供了详细的理论解释技术指导,还包括了许多实践经验教训,如霍尔传感器处理、谐波抑制策略的选择、代码生成配置等方面的实际案例。这对于初学者来说是非常宝贵的参考资料。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值