将PreferenceScreen放在prefers.xml中的RelativeLayout中

时间:2018-02-02 15:39:44

标签: android android-preferences

我正在尝试将布局和按钮元素放在res / xml / preferences.xml中。但是它抛出一个错误,说它无法找到RelativeLayout和Button的类。有什么方法可以解决这个问题吗?

这是代码。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true">

    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

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

            <SwitchPreference
                android:defaultValue="true"
                android:key="@string/notification_A"
                android:title="A" />

            <SwitchPreference
                android:defaultValue="true"
                android:key="@string/notification_B"
                android:title="B" />

            <SwitchPreference
                android:defaultValue="true"
                android:key="@string/notification_C"
                android:title="C" />

        </PreferenceCategory>

    </PreferenceScreen>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="ABC"
        android:onClick="showMPowerWebsite"
        android:id="@+id/button_abc_website"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:background="#000000"
        android:fontFamily="Arial"
        android:textColor="#ffffff"
        android:textAllCaps="false"
        android:textSize="20sp"
        android:layout_alignParentBottom="true"
        />
</RelativeLayout>

这是错误文本。

com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) 
        Suppressed: java.lang.ClassNotFoundException: android.preference.RelativeLayout
        at java.lang.Class.classForName(Native Method)
        at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
        at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
                ... 26 more
     Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

1 个答案:

答案 0 :(得分:0)

雅你不能那样做。来自Google's documentation

  

因为您的应用程序的设置UI是使用Preference对象而不是View对象构建的,所以您需要使用专门的Activity或Fragment子类来显示列表设置:

这就是为什么你不能使用按钮,你的第二个错误就是使用relativelayout作为基本布局,再次来自文档:

  

XML文件的根节点必须是PreferenceScreen元素。

因此,如果你刚刚删除了按钮和RelativeLayout,这应该可行。

您还可以扩展首选项并创建自己的首选项,这样您就可以使用这样的常规视图,但这样更复杂,只有在无法使用提供的屏幕构建屏幕时才应该这样做偏好结构到位。