SeekBarPreference showSeekBarValue 值未正确显示

SeekBarPreference showSeekBarValue value not shown properly

我正在尝试使用 android.support.v7.preference 中的 SeekBarPreference,而且我希望显示当前值。有一个属性 showSeekBarValue 使这成为可能。该值已显示,但似乎保存该值的 TextView 样式不正确,不幸的是部分值被隐藏了。

这是我的偏好xml:

<android.support.v7.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <SeekBarPreference
        android:key="size"
        android:title="Size"
        android:summary="size of progressBar in dp's"
        android:max="100"
        app:showSeekBarValue="true"
        android:defaultValue="25" />
</android.support.v7.preference.PreferenceScreen>

这是我的偏好片段:

import android.support.v7.preference.PreferenceFragmentCompat

class SettingsFragment: PreferenceFragmentCompat() {

    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
        addPreferencesFromResource(R.xml.preferences)
    }
}

我做错了什么吗?

您好,请检查以下内容 url 是否符合您的要求。

https://v4all123.blogspot.com/2017/12/simple-example-of-seekbarpreference-in.html

我想布局高度是固定的。如果你使用 wrap_content 希望它能通过改变高度来工作,或者 url 可以帮助你。

我查看了库代码,在布局 (preference_widget_seekbar.xml) 中,textView 上设置的高度是 match_parent,而父级的高度是 wrap_content。 将 textView 的高度设置为 wrap_content 即可解决问题。

这是我的 SettingsFragmentonViewCreated:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    listView.viewTreeObserver.addOnDrawListener {
        val sizePref = findPreference(getString(R.string.size))

        val prefView: View? = listView.layoutManager.findViewByPosition(sizePref.order)
        prefView?.apply {
            //Here is the fix
            findViewById<TextView>(seekbar_value).apply {
                layoutParams = LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT)
            }
            //another visual improvement
            findViewById<AppCompatSeekBar>(seekbar).apply {
                (layoutParams as LinearLayout.LayoutParams).apply {
                    gravity = Gravity.CENTER_VERTICAL
                }
            }

        }
    }
}