我使用PreferenceActivity
来设置使用OpenGL ES 2.0的动态壁纸。而且我常常为这个PreferenceActivity
获得完全乱码的屏幕。
重现的步骤:
PreferenceActivity
的屏幕显示为乱码。我没有用于绘制PreferenceActivity
的自定义代码 - 只有一些辅助方法来初始化数据。
通过在清单中设置android:hardwareAccelerated="false"
来禁用h / w加速后,Bug消失。显然,滚动动画并不像h / w加速那样流畅。
乱码屏幕示例:
活动代码:
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);
}
}