如何创建自定义 SeekBar 首选项?
How to Create a Custom SeekBar Preference?
我正在尝试创建自定义搜索栏首选项,但 Android 似乎找不到该元素。我得到
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setVisibility(int)' on a null object reference at
at android.support.v7.preference.SeekBarPreference.onBindViewHolder(SeekBarPreference.java:154)
当我尝试访问设置时。原因似乎是它找不到我的自定义 seekbar 元素并且 link 它符合偏好。通常我会将自定义首选项元素命名为 @android:id/seekbar
之类的名称以使 linkage 起作用,但是当涉及到 SeekBar 时,它表示这是私有的。我按照 Android: Creating custom preference 尝试了 @+id/seekbar
,但似乎无法将我的自定义搜索栏与首选项相关联。
这是我的代码:
偏好XML
<android.support.v7.preference.SeekBarPreference
android:key="my_seekbar_preference"
android:layout="@layout/seekbar_preference"
android:max="10"
android:defaultValue="5" />
SeekBar 布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_margin="@dimen/half_normal">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/half_normal"
android:layout_marginLeft="@dimen/normal"
style="@style/SettingsSubHeader"
android:text="Seekbar Settings"/>
<SeekBar
android:id="@+id/seekbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Widget.AppCompat.SeekBar.Discrete"
android:max="10"
android:min="0"/>
</LinearLayout>
对我做错了什么有什么想法吗?我的任何其他自定义首选项都没有这个问题。
问题似乎在于,除了我的自定义布局需要一个标记为 @+id/seekbar
的 Seekbar 元素外,它还需要一个标记为 @+id/seekbar_value
的 Textview 元素来显示搜索栏的当前值。如果缺少它,我会得到一个空指针异常。如果我添加一个,一切正常:
<TextView
android:id="@+id/seekbar_value"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
还要注意设置android:visibility="gone"
在这种情况下不起作用,所以如果你不想显示值,你需要设置android:textSize="0dp
隐藏它。
我正在尝试创建自定义搜索栏首选项,但 Android 似乎找不到该元素。我得到
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setVisibility(int)' on a null object reference at
at android.support.v7.preference.SeekBarPreference.onBindViewHolder(SeekBarPreference.java:154)
当我尝试访问设置时。原因似乎是它找不到我的自定义 seekbar 元素并且 link 它符合偏好。通常我会将自定义首选项元素命名为 @android:id/seekbar
之类的名称以使 linkage 起作用,但是当涉及到 SeekBar 时,它表示这是私有的。我按照 Android: Creating custom preference 尝试了 @+id/seekbar
,但似乎无法将我的自定义搜索栏与首选项相关联。
这是我的代码:
偏好XML
<android.support.v7.preference.SeekBarPreference
android:key="my_seekbar_preference"
android:layout="@layout/seekbar_preference"
android:max="10"
android:defaultValue="5" />
SeekBar 布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_margin="@dimen/half_normal">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/half_normal"
android:layout_marginLeft="@dimen/normal"
style="@style/SettingsSubHeader"
android:text="Seekbar Settings"/>
<SeekBar
android:id="@+id/seekbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Widget.AppCompat.SeekBar.Discrete"
android:max="10"
android:min="0"/>
</LinearLayout>
对我做错了什么有什么想法吗?我的任何其他自定义首选项都没有这个问题。
问题似乎在于,除了我的自定义布局需要一个标记为 @+id/seekbar
的 Seekbar 元素外,它还需要一个标记为 @+id/seekbar_value
的 Textview 元素来显示搜索栏的当前值。如果缺少它,我会得到一个空指针异常。如果我添加一个,一切正常:
<TextView
android:id="@+id/seekbar_value"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
还要注意设置android:visibility="gone"
在这种情况下不起作用,所以如果你不想显示值,你需要设置android:textSize="0dp
隐藏它。