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
即可解决问题。
这是我的 SettingsFragment
的 onViewCreated
:
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
}
}
}
}
}
我正在尝试使用 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
即可解决问题。
这是我的 SettingsFragment
的 onViewCreated
:
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
}
}
}
}
}