第一次執(zhí)行夜間模式代碼時,它會重新啟動 Activity第二次,代碼將正常工作并對程序進行更改我使用了以下代碼:public class Splash extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); new CheckedNightMode().execute(); } private class CheckedNightMode extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(Void... voids) { SharedPreferences sharedpreferences = getApplicationContext().getSharedPreferences("Night_Mode", Context.MODE_PRIVATE); boolean state = sharedpreferences.getBoolean("State", false); if (state) { AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); } else { AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); } return null; } @Override protected void onPostExecute(Void aVoid) { super.onPostExecute(aVoid); checkLanguage(); new Handler().postDelayed(new Runnable() { @Override public void run() { startActivity(new Intent(Splash.this, Main.class)); finish(); } }, 3000); } private void checkLanguage() { SharedPreferences sharedpreferences = getApplicationContext().getSharedPreferences("Language", Context.MODE_PRIVATE); String checkedLanguage = sharedpreferences.getString("Select", "en"); setLanguageState(checkedLanguage); }主題Theme.MaterialComponents.DayNight.NoActionBar我試過了,但還是一樣
2 回答

交互式愛情
TA貢獻1712條經(jīng)驗 獲得超3個贊
我的代碼是正確的。谷歌自己的文檔指出,如果你想在運行時更改主題,則當前操作將重新啟動。
注意:從 AppCompat v1.1.0 開始,setDefaultNightMode() 會自動重新創(chuàng)建任何已啟動的活動。

達令說
TA貢獻1821條經(jīng)驗 獲得超6個贊
這是默認行為。由于資源已更改,android:configChanges 默認重新啟動 Activity。本質(zhì)上,您遇到的是預(yù)期的行為,而不是錯誤,您可能應(yīng)該重新啟動活動,否則您將不得不遞歸地重新實例化/重新配置每個視圖,這將變得復雜且有錯誤。
添加回答
舉報
0/150
提交
取消