Android: как увеличить ширину PreferenceFragment (или избавиться от наценки)? - PullRequest
14 голосов
/ 16 февраля 2012

Android Settings Screenshot

FragmentsBC Screenshot

Если вы посмотрите на скриншот настроек Android или на скриншот FragmentsBC , в PreferenceFragment есть поле. Как вы можете избавиться от этого?

Я попытался сделать ширину PreferenceFragment для fill_parent, но безуспешно.

Ответы [ 7 ]

34 голосов
/ 22 февраля 2012

Наконец-то я нашел решение этой проблемы.

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

10 голосов
/ 09 июля 2012

Просто дополнение к этому;Принятый ответ не работал для меня, потому что у самого ListView нет никакого набора отступов, он установлен в родительском представлении (обычно LinearLayout).Поэтому вместо этого было необходимо следующее:

ListView lv = (ListView) findViewById(android.R.id.list);
ViewGroup parent = (ViewGroup)lv.getParent();
parent.setPadding(0, 0, 0, 0);
5 голосов
/ 09 мая 2014

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

Обязательно вызывайте его после того, как ваше представление было создано (не onCreate).

Помните, что int, который вы проходите, находится в pixels, а не dp. Для перевода из dp to pixels см. этот ответ .

2 голосов
/ 03 мая 2017

Существует более элегантное решение, по крайней мере для 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>
2 голосов
/ 24 октября 2013

Это то, что я делаю в переопределении 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);
0 голосов
/ 29 июня 2017

Когда вы выполняете действие предпочтения с фрагментом, вот решение, которое я использовал:

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

}

0 голосов
/ 03 августа 2016

Другой вариант - установить собственный адаптер.Таким образом, вы получаете больше гибкости и более устойчивы к изменениям.

См. этот другой ответ о настраиваемом адаптере заголовка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...