PreferenceActivity - 旋转后出现乱码

时间:2014-07-03 07:53:23

标签: android opengl-es android-ui android-preferences hardware-acceleration

我使用PreferenceActivity来设置使用OpenGL ES 2.0的动态壁纸。而且我常常为这个PreferenceActivity获得完全乱码的屏幕。

重现的步骤:

  1. 打开动态壁纸预览。
  2. 点按" 设置... "打开偏好设置按钮
  3. 无论您重复步骤2的频率如何,都会正确显示活动。
  4. 预览时更改设备的方向。
  5. 点按" 设置... "打开偏好设置再次按钮。
  6. PreferenceActivity的屏幕显示为乱码。
  7. 我没有用于绘制PreferenceActivity的自定义代码 - 只有一些辅助方法来初始化数据。

    通过在清单中设置android:hardwareAccelerated="false"来禁用h / w加速后,Bug消失。显然,滚动动画并不像h / w加速那样流畅。

    乱码屏幕示例:

    enter image description here

    活动代码:

    package org.package.name;
    
    import android.content.SharedPreferences;
    import android.os.Bundle;
    
    public class Prefs extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener
    {
        public static final String PREFERENCES = "org.package.name";
    
        // Option names and default values
        public static final String OPT_AUTOROTATE = "autorotate";
        private static final boolean OPT_AUTOROTATE_DEF = true;
        public static final String OPT_FLOATING = "floating_type";
        public static final String OPT_FLOATING_DEF = "1";
        public static final String OPT_ZOOM = "zoom";
        private static final boolean OPT_ZOOM_DEF = true;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            getPreferenceManager().setSharedPreferencesName(PREFERENCES);
            addPreferencesFromResource(R.xml.settings);
            getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
        }
    
        @Override
        protected void onDestroy() {
            getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
            super.onDestroy();
        }
    
        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        }
    
        public static boolean getAutoRotate(SharedPreferences prefs) {
            return prefs.getBoolean(OPT_AUTOROTATE, OPT_AUTOROTATE_DEF);
        }
    
        public static int getFloatingType(SharedPreferences prefs) {
            return Integer.parseInt(prefs.getString(OPT_FLOATING, OPT_FLOATING_DEF));
        }
    
        public static boolean getZoom(SharedPreferences prefs) {
            return prefs.getBoolean(OPT_ZOOM, OPT_ZOOM_DEF);
        }
    } 
    

0 个答案:

没有答案