我正在开发一个手电筒应用程序,我希望将其设置为用户打开应用程序时屏幕亮度变满的地方。我已经设置了一个复选框首选项来执行此操作,但有一个小问题。请参阅以下代码:
<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);
}
感谢帮助,
安德鲁
答案 0 :(得分:1)
更改属性的代码不应位于onCreate()
内。尝试在onStart()
内使用。
答案 1 :(得分:1)
如果您在onCreate()
中运行此代码,则只会在创建活动时调用一次。你需要在其他地方运行它。我推荐onWindowFocusChanged()
。 (您可以使用onStart()
或onResume()
,但这些不会考虑锁定屏幕。)
答案 2 :(得分:0)
解决!
我只需要一个完整的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 !
安德鲁