0

我想实现一个偏好屏幕。所以我基本上遵循了开发者文档中的示例。当我开始活动时,我看到标题列表,有一个标题(这部分似乎有效)。但是,一旦我单击此标题,活动就会因以下日志而崩溃。

我搜索了 SO 和 google,但找不到有关此错误的任何进一步信息。

我试图将preference_appearance_screen.xml缩短为一个CheckBoxPreference 项。XML Line 18 上的错误仍然相同。所以我猜这个文件中找不到错误。

我的活动课:

public class TrainerPreferenceActivity extends PreferenceActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public void onBuildHeaders(List<Header> target) {
        loadHeadersFromResource(R.xml.preference_headers, target);
    }

    public static class AppearancePrefFragment extends PreferenceFragment {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preference_appearance_screen);
        }
    }
}

preference_headers.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<preference-headers
    xmlns:android="http://schemas.android.com/apk/res/android">
    <header android:fragment=".TrainerPreferenceActivity$AppearancePrefFragment"
           android:title="Appearance"
           android:summary="An example of some preferences." />
</preference-headers>

preference_appearance_screen.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory 
        android:title="@string/pref_app_cat_theme">
    </PreferenceCategory>
    <PreferenceCategory 
        android:title="@string/pref_app_cat_background">
        <CheckBoxPreference 
            android:key="@string/pref_app_bg_iscustom_key" 
            android:title="@string/pref_app_bg_iscustom_title"
            android:summary="An example of some preferences."/>
        <CheckBoxPreference 
            android:key="@string/pref_app_bg_hascolor_key" 
            android:title="@string/pref_app_bg_hascolor_title"
            android:summary="An example of some preferences."/>  
        <CheckBoxPreference 
            android:key="@string/pref_app_bg_hasimage_key" 
            android:title="@string/pref_app_bg_hasimage_title"
            android:summary="An example of some preferences."/>
    </PreferenceCategory>
    <PreferenceCategory 
        android:title="@string/pref_app_cat_behavior">
        <CheckBoxPreference 
            android:key="@string/pref_app_orientationisenabled_key" 
            android:title="@string/pref_app_orientationisenabled_title"
            android:summary="An example of some preferences."/>        
        <CheckBoxPreference 
            android:key="@string/pref_app_gestureisenabled_key" 
            android:title="@string/pref_app_gestureisenabled_title"
            android:summary="An example of some preferences."/>
   </PreferenceCategory>
</PreferenceScreen>

日志猫:

04-30 17:22:01.215: E/AndroidRuntime(16775): 致命异常: main 04-30 17:22:01.215: E/AndroidRuntime(16775): java.lang.RuntimeException: Binary XML file line #18: You必须提供 layout_width 属性。04-30 17:22:01.215: E/AndroidRuntime(16775): 在 android.content.res.TypedArray.getLayoutDimension(TypedArray.java:491) 04-30 17:22:01.215: E/AndroidRuntime(16775): 在android.view.ViewGroup$LayoutParams.setBaseAttributes(ViewGroup.java:5318) 04-30 17:22:01.215: E/AndroidRuntime(16775): 在 android.view.ViewGroup$LayoutParams.(ViewGroup.java:5271) 04- 30 17:22:01.215: E/AndroidRuntime(16775): 在 android.widget.AbsListView$LayoutParams.(AbsListView.java:5718) 04-30 17:22:01.215: E/AndroidRuntime(16775): 在 android.widget .AbsListView.generateLayoutParams(AbsListView.java:5355) 04-30 17:22:01.215:

4

2 回答 2

2

好的,我设置了一个快速测试项目,但我无法重现该错误 - 它在我的 Galaxy Nexus 上显示并正常工作。你在什么设备上运行它,你有没有尝试过其他/模拟器?

我能找到的唯一可能相关的问题是这种风格/主题相关的问题,它似乎无处不在。您是否进行了任何自定义?如果是这样,请尝试以“vanilla”的形式运行上面的代码,看看是否会有所作为。

于 2012-05-01T06:47:01.763 回答
2

这是因为您引用了首选项屏幕正在使用的应用程序的自定义样式,并且该自定义样式没有继承那些必需的属性。要保留您的自定义样式并避免此问题,请确保您的自定义样式具有“layout_width”和“layout_height”属性。在你的情况下:

    <style name="MyListSeperator" parent="android:Widget.Holo.Light.TextView">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">wrap_content</item>
        ...
    </style>

然后你继续取消评论:

    <item name="android:listSeparatorTextViewStyle">@style/MyListSeparator</item>
于 2013-09-13T13:41:28.790 回答