我在设计偏好屏幕时遇到了非常奇怪的问题。虽然我没有在布局中留出任何边距,但它在左边留下了一些空间。
如下图所示:
XML:
<PreferenceScreen android:title="demo" >
<CheckBoxPreference
android:defaultValue="false"
android:key="prefSync"`
android:title="Auto Sync" />
</PreferenceScreen>
在屏幕中添加复选框首选项时我做错了吗?
最佳答案
为 androidx 更新此内容。
经过大量实验后,我通过将这个添加到每个具有过多缩进的首选项解决了这个问题:
app:iconSpaceReserved="false"
当然,您还需要将其添加到 xml 顶部的 PreferenceScreen 声明本身:
xmlns:app="http://schemas.android.com/apk/res-auto"
跟进自定义偏好
我注意到,在自定义首选项的情况下,尤其是在旧设备上,此解决方案并不总是有效。例如,这样的首选项仍然可以缩进:
com.example.preference.SomeCustomPreference
android:id="@+id/some_custom_preference"
android:name="Custom Preference"
android:key="@string/custom_pref_key"
android:summary="@string/custom_pref_summary"
android:title="@string/preference_custom_title"
app:iconSpaceReserved="false"
问题追溯到自定义首选项类中第三个构造函数参数的使用。如果传递第三个参数,列表项将缩进。如果省略它,列表将正确对齐:
class SomeCustomPreference
@JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyle: Int = android.R.attr.someCustomPreferenceStyle
) : DialogPreference(context, attrs, defStyle) {
override fun getDialogLayoutResource(): Int {
return R.layout.my_layout
}
}
取而代之的是,使用这个:
class SomeCustomPreference
@JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null
) : DialogPreference(context, attrs) {
override fun getDialogLayoutResource(): Int {
return R.layout.my_layout
}
}
这要归功于@CommonsWare 在这个非常古老的 post 中.
关于Android:如何在首选项屏幕中删除边距/填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18509369/