[英]Android Life Cycle Issue
我正在開發一個手電筒應用程序,我希望將它設置為用戶打開應用程序時屏幕亮度變滿的地方。 我已經設置了一個復選框首選項來執行此操作,但有一個小問題。 見下面的代碼:
<CheckBoxPreference
android:defaultValue="true"
android:key="pref_brightness"
android:summary="When checked, brightness will raise to highest level on main activity."
android:title="@string/pref_5" />
這是首選項布局的xml文件中的復選框代碼。
SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean box = getPrefs.getBoolean("pref_brightness", true);
if (box == true) {
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = 100 / 100.0f;
getWindow().setAttributes(lp);
}
這是我在MainActivity.java文件中訪問首選項的地方。 這是在onCreate()方法中。
現在我的問題是......當我打開應用程序時,會檢查該框(除非用戶更改)並且亮度最大化應該如此。 但是,當我進入首選項並取消選中該框時,然后按“后退”按鈕,該框保存但不會對主要活動產生任何影響。 如果我更改了框並按下操作欄上的“向上”按鈕,一切都很好。 按下后退按鈕時為什么不起作用? 我嘗試使用onBackPressed()但似乎沒有解決這個問題。
我做了你說的,它仍然無法正常工作。 如果未選中該框並且我檢查它,按下后退按鈕,它可以工作,但如果我再次將其更改回來,再次按回來,它不會保存。 這是您的建議代碼:
@Override
public void onWindowFocusChanged(boolean hasFocus) {
SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean box = getPrefs.getBoolean("pref_brightness", true);
if (box == true) {
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = 100 / 100.0f;
getWindow().setAttributes(lp);
}
super.onWindowFocusChanged(hasFocus);
}
感謝幫助,
安德魯
更改屬性的代碼不應該在onCreate()
內。嘗試使用onStart()
。
如果在onCreate()
運行此代碼,則只會在創建Activity時調用一次。 你需要在其他地方運行它。 我推薦onWindowFocusChanged()
。 (您可以使用onStart()
或onResume()
,但這些不會考慮鎖定屏幕。)
解決了!
我只需要一個完整的if語句,如下所示:
@Override
public void onWindowFocusChanged(boolean hasFocus) {
SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean box = getPrefs.getBoolean("pref_brightness", true);
if (box == true) {
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = 100 / 100.0f;
getWindow().setAttributes(lp);
}
else{
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = -1;
getWindow().setAttributes(lp);
}
super.onWindowFocusChanged(hasFocus);
}
現在,如果選中復選框,則將主活動的亮度更改為已滿,但如果未選中,則將用戶的亮度設置為其設置。
感謝Karakuri的幫助以及Nizam !
安德魯
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.