使用“切换”按钮切换dayNight主题

时间:2017-07-28 16:16:00

标签: android button android-widget android-theme

我已经在我的布局中实现了切换按钮,并希望使用Android dayNight主题,使用按钮,dayNight主题正常工作但问题是,当我< strong>点击它不能立即工作的开关,我必须更改活动然后它可以工作,例如如果我点击一个活动中的切换它在我按下后退按钮并移动到其他活动并再次返回到该活动并且我的开关状态始终设置为默认值时,我将不会做任何事情,当我改变我的活动并回来时,请帮助

  

我正在使用带有dayNight主题的Android Studio

以下是我的切换活动

   @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {

        setContentView(R.layout.settings_page);
        DayNightt = (Switch)findViewById(R.id.dayNight_Switch);
        DayNightt.setChecked(false);
        DayNightt.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked){
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);

                }else{
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
                }
            }
        });
        super.onCreate(savedInstanceState);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }
}

XML切换活动

<Switch
        android:id="@+id/dayNight_Switch"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/textView"
        android:layout_marginTop="58dp"
        android:checked="false"
        android:text="Switch" />

2 个答案:

答案 0 :(得分:1)

更改 开关后添加此方法:

super.recreate();

重新 活动,如果工作正常,则设置正确的主题

有些人喜欢这样:

DayNightt.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked){
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
                    super.recreate();
                    //Or this
                    recreate();

                }else{
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
                    super.recreate();
                    //Or this
                    recreate();
                }
            }
        });

<强>更新

如果第一种方法不能正常运行,您可以尝试:

DayNightt.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked){
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
                    Intent intent = getActivity().getIntent();
                    getActivity().finish();
                    startActivity(intent);

                }else{
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
                    Intent intent = getActivity().getIntent();
                    getActivity().finish();
                    startActivity(intent);
                }
            }
        });

注意:对我来说这第二种方式不是最好的,但你可以试试。

答案 1 :(得分:0)

我通过在我的活动中实现onPause()和onResume()方法解决了我的切换按钮状态更改。现在切换活动后切换状态保持不变,我还在我的Activity中实现了一个包。我在onCreate方法之后添加了它。

更新了代码

 private static Bundle bundle = new Bundle();

   @Override
    public void onPause() {
        super.onPause();
        bundle.putBoolean("ToggleButtonState", DayNightt.isChecked());
    }
    @Override
    public void onResume() {
        super.onResume();
        DayNightt.setChecked(bundle.getBoolean("ToggleButtonState",false));
    }

唯一的问题是我必须切换活动才能看到它的实现,有时会克服它。