我正在尝试更改我的 Android 应用程序的背景颜色(我是 ADK 的新手)。
我在另一个问题中读到,我必须在我的主布局(RelativeLayout)和应用程序中的所有其他视图之间使用另一个 LinearLayout,并改为更改它的颜色。我想要一个偏好来指示背景更改为哪种颜色,以及偏好活动和一切运行顺利;但是,当我将 R.id.bg(bg是 LinearLayout 的 ID)传递给 findViewById() 时,每当我尝试更改背景颜色时,它都会返回 null 并抛出 NPE。
编辑:你知道吗,这是整个班级的来源。:P
public class Preferences extends PreferenceActivity implements
OnSharedPreferenceChangeListener {
SharedPreferences prefs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.registerOnSharedPreferenceChangeListener(this);
}
private void showToast(CharSequence text) {
Context context = getApplicationContext();
showToast(context, text, 3000);
}
private void showToast(Context context, CharSequence text, int duration) {
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
if (key.equalsIgnoreCase("list_color")) {
LinearLayout bg = (LinearLayout) findViewById(R.id.bg);
String color = sharedPreferences.getString("list_color", "White");
if (bg == null) {
showToast("Unable to change background color");
} else {
if (color.equals("White")) {
bg.setBackgroundColor(android.R.color.white);
showToast("Background color set to white");
} else if (color.equals("Black")) {
bg.setBackgroundColor(android.R.color.black);
showToast("Background color set to black");
}
} // end NP test
}
}
}