自定义首选项不呈现布局(xml)

时间:2017-09-02 10:27:13

标签: android xml android-layout android-preferences

我想要实现的目标:我想创建自己的首选项布局,其中包含SeekBar和其他元素,并且所有内容都在我的主要首选项中呈现为自定义类。

我做了什么:

- 我已经创建了自己的布局(将在首选项屏幕中呈现)。这是基本的XML:

 <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent">

        <SeekBar
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>
  • 我创建了自定义类,扩展了Preference。这是我的样本:

    公共类MyCustomPreference扩展了首选项{

    public MyCustomPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
    
        setLayoutResource(R.layout.mycustompreferencelayout);
    
    }
    

- 我已经创建了主要首选项(其中包含复选框和其他元素,包括我的自定义首选项)。这是我的样本:

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

    <CheckBoxPreference android:title="Checkbox1"></CheckBoxPreference>
    <MyCustomPreference
        android:key="customKey"></MyCustomPreference>



</PreferenceScreen>

当我想在主要首选项文件中看到我的自定义布局时,我只能看到复选框和空白区域,它应该是我的自定义首选项。 XML说它是一个渲染问题。

java.lang.NullPointerException
    at android.preference.PreferenceGroup.addPreference(PreferenceGroup.java:139)
    at android.preference.PreferenceGroup.addItemFromInflater(PreferenceGroup.java:105)
    at android.preference.PreferenceGroup.addItemFromInflater(PreferenceGroup.java:42)
    at android.preference.GenericInflater.rInflate(GenericInflater.java:490)
    at android.preference.GenericInflater.inflate(GenericInflater.java:327)
    at android.preference.Preference_Delegate.inflatePreference(Preference_Delegate.java:60)
    at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:320)
    at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:429)
    at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:368)
    at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:567)
    at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:549)
    at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:863)
    at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:549)
    at com.android.tools.idea.rendering.RenderTask.lambda$inflate$1(RenderTask.java:680)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

enter image description here

显然我在这里遗漏了一些东西。官方Settings文档阅读量很大,但缺少很多信息。

帮助会非常受欢迎,因为这让我疯狂!

1 个答案:

答案 0 :(得分:1)

使用自定义偏好类时使用完整包

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

<CheckBoxPreference android:title="Checkbox1"></CheckBoxPreference>
<your.full.package.MyCustomPreference
    android:key="customKey"></MyCustomPreference>

现在启动你的应用程序

注意。 Android Studio预览版不会显示您的自定义偏好