SeekBarPreference showSeekBarValue值显示不正确

时间:2018-08-10 19:21:34

标签: android android-support-library android-preferences

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

enter image description here

这是我的首选项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)
    }
}

我在做错什么吗?

2 个答案:

答案 0 :(得分:0)

您好,请检查以下网址,以了解您的要求。

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

我认为布局高度是固定的。如果您使用wrap_content希望它可以通过更改高度来起作用,否则URL可能会对您有所帮助。

答案 1 :(得分:0)

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

这是我onViewCreated中的SettingsFragment

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
                }
            }

        }
    }
}