Android:如何在首选项屏幕中删除边距/填充

标签 android preference checkboxpreference

我在设计偏好屏幕时遇到了非常奇怪的问题。虽然我没有在布局中留出任何边距,但它在左边留下了一些空间。

如下图所示: enter image description here

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/

相关文章:

android - 如何避免: ndk-build adds lib prefix to shared libraries

java - 来自不同类的自定义 SeekBarPreference setProgress?

java - 如何验证特定 int 范围的 EditTextPreference 值

android - 当 CheckboxPreference 摘要字段不够长时,为 Preference 屏幕显示额外信息?

android - 在 Activity 中设置 CheckBoxPreference 的值

android - 使用 vue.js 和 android 的移动应用程序的区别

java - 如何从浏览器访问安卓

java - 自定义 ListView 中的空指针异常 View 持有者

android - Android 中的组合首选项

java - 带按钮的复选框首选项