android - 创建自定义首选项
问题描述
我想创建一个SeekBarPreference
类似的偏好。我需要范围Seekbar
。然后我找到了这个库:https ://github.com/syedowaisali/crystal-range-seekbar 。我想创建一个首选项,使用CrystalRangeSeekbar
它与其他首选项具有相同的外观。
我使用 compileSdkVersion = 29,minSdkVersion = 23,targetSdkVersion = 29。
这在Android上甚至可能吗?我花了几个小时尝试编写一些代码,但我从未设法获得相同的外观。我需要所有填充、边距、标题和摘要位置等与内置首选项相同。
是否有任何官方手册可以制作与内置首选项外观相同的自定义首选项?
解决方案
我认为没有关于如何执行此操作的手册,但我遇到了一个问题,我需要 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>
然后在代码中,我调整了 textview 值以显示调整后的范围,而不是通过将 20 添加到值来显示调整后的范围而不是 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
}
});
您现在可能可以使用 Androidx 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/主/java/androidx/preference/SeekBarPreference.java
和
推荐阅读
- r - 绘图标签在 Linux 服务器上的 R Jupyter 笔记本中显示为十六进制 ASCII 代码
- angular - 在第一页加载时可观察到未定义 - 提供工作和非工作实现,寻找原因
- python - 如何在python中获取列表元素的所有组合?
- python - 为每组按数据提取组
- c++ - 启动新屏幕时 QT Quick 从 C++ 向 QML 发送数据
- angular - 如果值为空,如何不使用管道
- powershell - CAML 查询完全忽略日期
- mysql - 过程/函数中的 MySQL 数组
- arrays - React.JS- 比较 2 个对象数组并删除没有 ID 的重复项
- python - 如何使用 cmd 创建 django 环境?它在 anaconda shell 中运行良好,而不是在 cmd