Android 安卓:如何最大化偏好片段宽度(或去除边距)?

Android 安卓:如何最大化偏好片段宽度(或去除边距)?,android,preference,Android,Preference,如果您查看Android设置截图或截图,PreferenceFragment中有空白。你怎样才能摆脱它 我尝试使用PreferenceFragment width来填充父对象,但没有成功。最后,我找到了解决方法 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = super.onCreat

如果您查看Android设置截图或截图,PreferenceFragment中有空白。你怎样才能摆脱它


我尝试使用PreferenceFragment width来填充父对象,但没有成功。

最后,我找到了解决方法

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View v = super.onCreateView(inflater, container, savedInstanceState);
    if(v != null) {
        ListView lv = (ListView) v.findViewById(android.R.id.list);
        lv.setPadding(10, 10, 10, 10);
    }
    return v;
}

您可以使用以下命令设置填充:setPadding()

这只是一个补充;接受的答案对我不起作用,因为
ListView
本身没有任何填充设置,它是在父视图上设置的(通常是
LinearLayout
)。因此,有必要采取以下措施:

ListView lv = (ListView) findViewById(android.R.id.list);
ViewGroup parent = (ViewGroup)lv.getParent();
parent.setPadding(0, 0, 0, 0);

这是我在onResume覆盖中所做的:

    // Fix PreferenceFragment's padding...
    int paddingSize = 0;
    if (Build.VERSION.SDK_INT < 14)
    {
        paddingSize = (int) (-32 * CLS_Gfx.scale);
    }
    else
    {
        paddingSize = (int) (-16 * CLS_Gfx.scale);
    }

    final View v = getView();

    v.setPadding(paddingSize, 0, paddingSize, 0);
//修复PreferenceFragment的填充。。。
int paddingSize=0;
如果(Build.VERSION.SDK_INT<14)
{
填充大小=(int)(-32*CLS\Gfx.scale);
}
其他的
{
填充尺寸=(整数)(-16*CLS\Gfx.scale);
}
最终视图v=getView();
v、 设置填充(填充大小,0,填充大小,0);
getListView().setPadding(左、上、右、下)

确保在创建视图后调用它(而不是
onCreate


请记住,传入的
int
像素为单位,而不是
dp
。要从
dp转换为像素,请参见。

另一个选项是设置您自己的适配器。 这样,您就有了更大的灵活性,而且它对更改更具鲁棒性


请参见有更优雅的解决方案,至少对于PreferenceFragmentCompat,可以定义主题中的填充。假设我们的活动设置为android:theme=“@style/PreferenceTheme”


@样式/我的首选项最小覆盖
@样式/MyPreferenceFragmentListStyle
0dp
0dp

当您使用片段执行首选项活动时,以下是我使用的解决方案:

public class T2DPreferenceActivity extends PreferenceActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getFragmentManager().beginTransaction().replace(android.R.id.content,
            new T2DPreferenceFragment()).commit();
}

public static class T2DPreferenceFragment extends PreferenceFragment {
    @Override
    public void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.server_screen_preference);
    }

    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        ListView lv = (ListView)view.findViewById(android.R.id.list);
        ViewGroup parent = (ViewGroup)lv.getParent();
        parent.setPadding(0, 100, 0, 0);
    }
}

}这里的答案对我来说不合适。然而,这一次:

资料来源:

在您的首选项屏幕中添加以下行:

xmlns:app="http://schemas.android.com/apk/res-auto"
在PreferenceScreen及其元素中添加此行:

app:iconSpaceReserved="false"
例如:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    app:iconSpaceReserved="false"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <CheckBoxPreference
        app:iconSpaceReserved="false"
        android:defaultValue="false"
        android:key="key1"
        android:title="title1" />
    <SwitchPreference
        app:iconSpaceReserved="false"
        android:defaultValue="false"
        android:key="@string/pref_wakeup"
        android:title="key2" />
</PreferenceScreen>


hey@jclova,我和urs面临着同样的问题。这里是它的链接:实际上我并没有为首选屏幕创建任何自定义布局。只需在布局中使用checkboxpreference,尽管它会将任何边距设置为左侧。你知道我哪里出了问题吗?请帮忙。记住填充量是Px。在xml中设置任何覆盖方法之前,您可能希望将它们从dp转换为px。对我来说,“v”总是返回null(super.onCreateView(…)在Android 4.3中工作得非常完美,我准备忘记它。这是唯一对我有效的答案。我在我的
PreferenceActivity
onCreate()
方法中调用了它。添加
lv.setPadding(0,0,0,0)不是更好吗?对我来说@jclova的答案确实有效,但我将设置
lv
lv.getParent()
,以处理未经测试的设备。谢谢你。这对我来说非常有效。即使是android:icon=“@null”也没有做任何更改,但您的解决方案仍然有效。非常感谢您提供的伟大解决方案。我认为这应该是一个公认的答案。@Smeet我很高兴它帮助了你!否决投票时没有评论?这里回答了类似的问题:这对我不起作用。使用PreferenceFragmentCompat时仍然可以看到填充。此外,我没有收到任何警告或错误,但甚至不存在(自动完成不工作)@qkx事实上自动完成不工作并不意味着属性不存在<代码>首选项主题
属性不存在()。所以,您很可能在安装过程中遇到了一些问题(可能是支持库或其版本?),我使用的是最新版本(28.0.0),我复制粘贴了您的代码并应用了这种样式。它真的根本不起作用:)而且它不能——因为问题不是填充,问题是compat首选项总是为图标保留间距。这是问题的根源,而不是填充。因此,您必须将PreserveConspacing设置为false——但在代码中,通过编程(在xml中,它不起作用)。这是一个真正的解决方案:)我在其他一些问题上也找到了它,我可以确认它工作得很好。好吧,它不工作,但它仍然对我和至少2个投票率较高的用户有效;)您复制粘贴了解决方案,但没有复制粘贴的设置,因此我的评论仍然适用:我们可能有不同的设置,这就是为什么它对我有效,但对您无效。
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    app:iconSpaceReserved="false"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <CheckBoxPreference
        app:iconSpaceReserved="false"
        android:defaultValue="false"
        android:key="key1"
        android:title="title1" />
    <SwitchPreference
        app:iconSpaceReserved="false"
        android:defaultValue="false"
        android:key="@string/pref_wakeup"
        android:title="key2" />
</PreferenceScreen>