在 PreferenceFragment 中去掉上面的额外填充
Get rid of extra padding above in PreferenceFragment
我正在尝试为我的应用构建首选项屏幕。我创建了一个名为 SettingsFragment
的 class,它从 PreferenceFragment
扩展而来。我没有从 xml 加载首选项,因为我需要动态加载一些数据。这就是我以编程方式构建所有内容的原因。一切都按预期显示。但是顶部有一些额外的填充。见下图:
我不确定为什么会这样。下面是我在 SettingsFragment
class:
中写的代码
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PreferenceScreen root = getPreferenceManager().createPreferenceScreen(getActivity());
root.setTitle("Hello World");
PreferenceCategory cat1 = new PreferenceCategory(root.getContext());
root.addPreference(cat1);
ListPreference lang = new ListPreference(root.getContext());
lang.setEntries(new CharSequence[]{"English", "Bangla"});
lang.setEntryValues(new CharSequence[]{"en", "bn"});
lang.setTitle("Choose Language");
lang.setSummary("English");
cat1.addPreference(lang);
CheckBoxPreference check = new CheckBoxPreference(root.getContext());
check.setTitle("Title Check");
cat1.addPreference(check);
setPreferenceScreen(root);
}
仅供参考,我在我的应用程序中使用 NavigationDrawer
。当从抽屉中单击导航项时,此 SettingsFragment
加载。
检查 Fragment
及其父级 Activity
的布局文件,通常当您创建新项目或 layout/screen 时,您的 [=] 上会提供自动填充15=]布局文件。
进入您的 Fragment 布局。您将在 Main/Parent 布局中看到以下标签。
像这样 android:paddingBottom
或 android:paddingTop
删除这些。
或者,如果您想从每个 fragments/activitys/layouts 中删除此填充。转到 dimen.xml 并将 activity_vertical_margin
设置为 0。它的默认值为 16dp。
您正在尝试添加没有标题的 PreferenceCategory,这导致空 space。
下一行是问题所在:
PreferenceCategory cat1 = new PreferenceCategory(root.getContext());
root.addPreference(cat1);
因此您可以像这样将标题添加到您的偏好类别中:
PreferenceCategory cat1 = new PreferenceCategory(root.getContext());
cat1.setTitle("Category");
root.addPreference(cat1);
如果您不想要偏好类别,您可以像下面这样修改您的代码:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PreferenceScreen root = getPreferenceManager().createPreferenceScreen(getActivity());
root.setTitle("Hello World");
ListPreference lang = new ListPreference(root.getContext());
lang.setEntries(new CharSequence[] { "English", "Bangla" });
lang.setEntryValues(new CharSequence[] { "en", "bn" });
lang.setTitle("Choose Language");
lang.setSummary("English");
root.addPreference(lang);
CheckBoxPreference check = new CheckBoxPreference(root.getContext());
check.setTitle("Title Check");
root.addPreference(check);
setPreferenceScreen(root);
}
我正在尝试为我的应用构建首选项屏幕。我创建了一个名为 SettingsFragment
的 class,它从 PreferenceFragment
扩展而来。我没有从 xml 加载首选项,因为我需要动态加载一些数据。这就是我以编程方式构建所有内容的原因。一切都按预期显示。但是顶部有一些额外的填充。见下图:
我不确定为什么会这样。下面是我在 SettingsFragment
class:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PreferenceScreen root = getPreferenceManager().createPreferenceScreen(getActivity());
root.setTitle("Hello World");
PreferenceCategory cat1 = new PreferenceCategory(root.getContext());
root.addPreference(cat1);
ListPreference lang = new ListPreference(root.getContext());
lang.setEntries(new CharSequence[]{"English", "Bangla"});
lang.setEntryValues(new CharSequence[]{"en", "bn"});
lang.setTitle("Choose Language");
lang.setSummary("English");
cat1.addPreference(lang);
CheckBoxPreference check = new CheckBoxPreference(root.getContext());
check.setTitle("Title Check");
cat1.addPreference(check);
setPreferenceScreen(root);
}
仅供参考,我在我的应用程序中使用 NavigationDrawer
。当从抽屉中单击导航项时,此 SettingsFragment
加载。
检查 Fragment
及其父级 Activity
的布局文件,通常当您创建新项目或 layout/screen 时,您的 [=] 上会提供自动填充15=]布局文件。
进入您的 Fragment 布局。您将在 Main/Parent 布局中看到以下标签。
像这样 android:paddingBottom
或 android:paddingTop
删除这些。
或者,如果您想从每个 fragments/activitys/layouts 中删除此填充。转到 dimen.xml 并将 activity_vertical_margin
设置为 0。它的默认值为 16dp。
您正在尝试添加没有标题的 PreferenceCategory,这导致空 space。
下一行是问题所在:
PreferenceCategory cat1 = new PreferenceCategory(root.getContext());
root.addPreference(cat1);
因此您可以像这样将标题添加到您的偏好类别中:
PreferenceCategory cat1 = new PreferenceCategory(root.getContext());
cat1.setTitle("Category");
root.addPreference(cat1);
如果您不想要偏好类别,您可以像下面这样修改您的代码:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PreferenceScreen root = getPreferenceManager().createPreferenceScreen(getActivity());
root.setTitle("Hello World");
ListPreference lang = new ListPreference(root.getContext());
lang.setEntries(new CharSequence[] { "English", "Bangla" });
lang.setEntryValues(new CharSequence[] { "en", "bn" });
lang.setTitle("Choose Language");
lang.setSummary("English");
root.addPreference(lang);
CheckBoxPreference check = new CheckBoxPreference(root.getContext());
check.setTitle("Title Check");
root.addPreference(check);
setPreferenceScreen(root);
}