我正在尝试使用 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)
}
}
我在做错什么吗?
答案 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
}
}
}
}
}