Android: Как максимизировать ширину PreferenceFragment (или избавиться от поля)?

Скриншот Android Settings

Скриншот FragmentsBC

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

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

Solutions Collecting From Web of "Android: Как максимизировать ширину PreferenceFragment (или избавиться от поля)?"

Наконец, я нашел решение этого.

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

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

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

Имейте в виду, что int вы передаете, находится в pixels , а не в dp . Для преобразования из dp to pixels см. Этот ответ .

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

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

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

Есть более элегантное решение, по крайней мере для PreferenceFragmentCompat, для определения дополнения в теме. Предположим, что у нас есть наша работа, установленная андроид: 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> 

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

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

}