内部首选屏幕中的黑屏

时间:2010-07-02 10:21:35

标签: android

我的PreferenceActivity在另一个PreferenceScreen中包含嵌套的PreferenceScreen,我正在将PrefenceActivity的主题应用于更改背景颜色的主题。但是,当我打开嵌套的PreferenceScreen时,我得到一个黑色的背景,我看不到选项。

这种情况发生在Android 2.1中,但它不会发生在Android 1.6上。 关于如何纠正这个问题的任何想法?

4 个答案:

答案 0 :(得分:13)

我找到了一种方法,但它非常黑客。

这是我的prefs.xml

<PreferenceCategory
    android:title="@string/hello">

    <CheckBoxPreference
        key="pref_update_key"
        android:title="@string/hello"
        android:summaryOn="@string/hello"
        android:summaryOff="@string/hello"
        android:persistent="true"
        android:defaultValue="false" />

</PreferenceCategory>

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:key="pref_second_preferencescreen_key" android:title="@string/hello">
        <CheckBoxPreference
        key="pref_update_key"
        android:title="@string/hello"
        android:summaryOn="@string/hello"
        android:summaryOff="@string/hello"
        android:persistent="true"
        android:defaultValue="false" />
</PreferenceScreen>

这是我extends PreferenceActivity

类的代码
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.layout.prefs);
    getWindow().setBackgroundDrawableResource(R.drawable.background);

    PreferenceScreen b = (PreferenceScreen) findPreference("pref_second_preferencescreen_key");
    b.setOnPreferenceClickListener(new OnPreferenceClickListener() {

        @Override
        public boolean onPreferenceClick(Preference preference) {
            PreferenceScreen a = (PreferenceScreen) preference;
            a.getDialog().getWindow().setBackgroundDrawableResource(R.drawable.background);
            return false;
        }
    });
}

答案 1 :(得分:4)

对我有用:只需设置一个列表样式:

<style name="Theme.Preferences" parent="android:Theme.Light" >
    <item name="android:listViewStyle">@style/lightListView</item>
</style>
<style name="lightListView">
    <item name="android:background">#ffffff<item>
</style>

答案 2 :(得分:3)

解决方法:

1)使用;

准备2个PreferenceScreen xml而不是子PreferenceScreen

2)将辅助PreferenceScreen活动添加到AndroidManifest.xml:

<activity android:name="com.example.PreferenceActivity2"
          android:label="Issue4611"
          android:theme="@android:style/Theme.Light">
    <intent-filter>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

3)对于在第一个PreferenceScreen中使用show secondary PreferenceScreen:

<PreferenceScreen android:key="key1"
                  android:title="1 Item"
                  android:summary="">
    <intent android:action="android.intent.action.VIEW"
            android:targetPackage="com.example"
            android:targetClass="com.example.PreferenceActivity2"/>
</PreferenceScreen>

Example

答案 3 :(得分:0)

Macarse 的答案很完美, 我正在寻找经典的白色背景,所以我在他的回答中改变了这一行:

a.getDialog().getWindow().setBackgroundDrawableResource(R.drawable.background);

为:

a.getDialog().getWindow().setBackgroundDrawableResource(android.R.color.white);

并且效果很好。