我在我的偏好中有一个搜索栏来更新屏幕亮度。有没有办法刷新UI以查看实时更改?

时间:2012-01-26 19:19:12

标签: android

搜索栏在任何地方都可以正常工作,但我希望看到更改发生在首选屏幕中。问题是搜索栏是一个偏好,因此我不能做共享偏好并在onProgressChanged方法中更新它。

这有什么办法吗?

我设置了这样的亮度:

    SharedPreferences prefs;
    prefs = PreferenceManager.getDefaultSharedPreferences(this);
    float sb = prefs.getInt("screenBrightness", 1);
    WindowManager.LayoutParams lp = getWindow().getAttributes();
    lp.screenBrightness = sb / 100.0f;
    getWindow().setAttributes(lp);

但我不能在onProgressChanged中使用它,因为该类正在扩展Preference。

1 个答案:

答案 0 :(得分:3)

您需要做的是使用像OnSharedPreferencesChanged这样的onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)听众。在您的PreferenceActivity内部执行此操作:

SharedPreferences.OnSharedPreferenceChangeListener prefChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() { 
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
        if(key.equals("screenBrightness")) {
        //set brightness here
            float sb = sharedPreferences.getInt(key, 1);
            WindowManager.LayoutParams lp = getWindow().getAttributes();
            lp.screenBrightness = sb / 100.0f;
            getWindow().setAttributes(lp);
        }
    }
};

然后在onSharedPreferenceChanged中,您可以使用您一直使用的密钥并相应地设置亮度