创建自定义首选项



我想创建一个类似SeekBarPreference的首选项。我需要射程Seekbar。然后我找到了这个库:https://github.com/syedowaisali/crystal-range-seekbar。我想使用CrystalRangeSeekbar创建一个与其他首选项外观相同的首选项。

我使用compileSdkVersion=29,minSdkVersion=2 3,targetSdkVersion=29。

这在安卓系统上可能吗?我花了几个小时试图编写一些代码,但我从来并没有得到同样的外观。我需要所有的填充、边距、标题和摘要位置等都与内置的首选项相同。

是否有任何官方手册来制作与内置偏好相同外观的自定义偏好?

我不认为有关于如何做到这一点的手册,但我遇到了一个问题,我需要一个minSdkVersion=22的范围搜索栏偏好,而当时可用的内容直到后来的SDK版本才允许进行范围搜索。

所以我只是做了自己的,不确定它与内置偏好相比到底是什么样子

使用的xml布局片段是

<GridLayout
android:id="@+id/GridLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:columnCount="2"
android:orientation="horizontal">
<SeekBar
android:id="@+id/fontSeek"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_columnWeight="15"
android:layout_gravity="fill"
android:max="40"
android:padding="6dp"/>

<TextView
android:id="@+id/fontText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="1"
android:layout_gravity="center"
android:textStyle="bold"
android:textColor="@color/colorText"
android:typeface="monospace"
android:minEms="2"
android:padding="6dp"/>
</GridLayout>

然后在代码中,我通过在值上加20来调整textview值以显示调整后的范围,而不是0到40。

提取的与xml 相关的Java代码

int fontSize;
int fontSizeOffset = 20;
fontSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// Work out the correct values
fontSizeAdjusted = progress;
fontSize = fontSizeAdjusted + fontSizeOffset;
// Update the Textview
fontTextView.setText(String.valueOf(fontSize));
// store pref
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt("fontSize", fontSize);
editor.apply();
}
public void onStartTrackingTouch(SeekBar seekBar) {
// Do Nothing
}
public void onStopTrackingTouch(SeekBar seekBar) {
// Do Nothing
}
});

你现在也许可以用安卓做得更好https://developer.android.com/reference/androidx/preference/SeekBarPreference但在我开发此代码时,这是不可用的。

您应该能够调整样式以完全匹配标准偏好,因为文档说这只是一个带有可选texview的搜索栏。

你可以随时查看Androidx的来源,看看他们是如何做到的。https://android.googlesource.com/platform/frameworks/support/+/refs/heads/androidx-master dev/preference/preference/src/main/java/androidx/preference/SeekBarPreference.java

https://android.googlesource.com/platform/frameworks/support/+/refs/heads/androidx master dev/preference/preference/res/layout/preference_widget_seekbar.xml

最新更新