Если вы посмотрите на скриншот настроек Android или FragmentsBC, там являются маржей в PreferenceFragment. Как вы можете избавиться от него?
Я попытался сделать ширину PreferenceFragment равной fill_parent, но безуспешно.
Если вы посмотрите на скриншот настроек Android или FragmentsBC, там являются маржей в PreferenceFragment. Как вы можете избавиться от него?
Я попытался сделать ширину PreferenceFragment равной fill_parent, но безуспешно.
Наконец, я нашел решение этой проблемы.
@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);
lv.setPadding(0, 0, 0, 0);
? Для меня ответ @jclova работает, но я установлю оба дополнения lv
и lv.getParent()
для работы с непроверенными устройствами. Спасибо.
- person Weekend; 12.11.2015
getListView().setPadding(left, top, right, bottom)
Обязательно вызывайте его после создания представления (не onCreate
).
Имейте в виду, что int
, которое вы передаете, находится в pixels
, а не dp
. Чтобы преобразовать из dp to pixels
, см. этот ответ.
onCreate()
моего PreferenceActivity
.
- person Maurizio; 02.08.2014
Вот что я делаю в переопределении 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, для определения отступов в теме. Предположим, что у нас установлена активность 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>
preferenceTheme
существует (stackoverflow.com/a/32073430/639183). Так что, скорее всего, у вас есть проблемы с настройкой (возможно, с библиотекой поддержки или ее версией?)
- person ernazm; 14.03.2019
Ответы здесь не сработали для меня. Однако этот сделал:
источник: 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>
Другой вариант — установить собственный адаптер. Таким образом, вы получаете больше гибкости и более устойчивы к изменениям.
См. другой ответ о пользовательском адаптере заголовка
Когда вы выполняете действие предпочтения с фрагментом, вот решение, которое я использовал:
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);
}
}
}