15

安卓设置截图

FragmentsBC 截图

如果您查看 Android 设置屏幕截图或FragmentsBC屏幕截图,则 PreferenceFragment 中有边距。你怎么能摆脱它?

我尝试将 PreferenceFragment 宽度设置为 fill_parent,但没有运气。

4

8 回答 8

34

最后,我找到了解决方案。

@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();

于 2012-02-22T15:09:53.217 回答
10

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

ListView lv = (ListView) findViewById(android.R.id.list);
ViewGroup parent = (ViewGroup)lv.getParent();
parent.setPadding(0, 0, 0, 0);
于 2012-07-09T17:30:06.500 回答
5

getListView().setPadding(left, top, right, bottom)

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

请记住,int您传入的是 in pixels,而不是dp。要从中转换,dp to pixels请参阅此答案

于 2014-05-08T21:13:58.333 回答
2

这就是我在 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);
于 2013-10-24T13:57:54.770 回答
2

至少对于 PreferenceFragmentCompat 来说,有更优雅的解决方案来定义主题中的填充。假设我们将活动设置为 android:theme="@style/PreferenceTheme"

   <style name="PreferenceTheme" parent="@style/Theme.AppCompat">
       <item name="preferenceTheme">@style/MyPreferenceThemeOverlay</item>
   </style>

   <style name="MyPreferenceThemeOverlay" parent="PreferenceThemeOverlay">
        <item name="preferenceFragmentListStyle">@style/MyPreferenceFragmentListStyle</item>
   </style>

   <style name="MyPreferenceFragmentListStyle" parent="@style/PreferenceFragmentList">
       <item name="android:paddingLeft">0dp</item>
       <item name="android:paddingRight">0dp</item>
   </style>
于 2017-05-03T15:13:54.457 回答
1

这里的答案对我不起作用。但是,这个做到了:

来源:https ://stackoverflow.com/a/53402144/9026710

在您的 PreferenceScreen 添加此行:

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>
于 2020-05-18T11:31:44.027 回答
0

另一种选择是设置您自己的适配器。这样你就有了更大的灵活性,并且对变化更加健壮。

请参阅有关自定义标头适配器的其他答案

于 2016-08-03T15:29:48.877 回答
-1

当您使用片段进行偏好活动时,这是我使用的解决方案:

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);
    }
}

}

于 2017-06-29T16:18:08.827 回答