我不知道如何在 PreferenceScreen
中实现向上按钮。向上按钮在您的应用程序图标旁边的操作栏中显示一个插入符号,允许您导航应用程序的层次结构,更多信息 here .
我有一个首选项 fragment ,当我的主要 Activity 打开时显示,我可以通过添加此行“getActionBar().setDisplayHomeAsUpEnabled(true);”来显示向上按钮:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActionBar().setDisplayHomeAsUpEnabled(true);
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new SettingsFragment())
.commit();
这会导致向上按钮显示在首选项 fragment 中,但我只想在我的其中一个 PreferenceScreens
打开时显示向上按钮,从而允许导航到主 PreferenceFragment
.
我的应用类似于主设置应用。只有从主“设置”应用程序打开的子屏幕(例如“位置访问”)具有向上箭头。
最佳答案
从这里question ,我只是将这两个代码块添加到我的偏好 fragment 中:
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
super.onPreferenceTreeClick(preferenceScreen, preference);
// If the user has clicked on a preference screen, set up the action bar
if (preference instanceof PreferenceScreen) {
initializeActionBar((PreferenceScreen) preference);
}
return false;
}
还有这个:
/** Sets up the action bar for an {@link PreferenceScreen} */
public static void initializeActionBar(PreferenceScreen preferenceScreen) {
final Dialog dialog = preferenceScreen.getDialog();
if (dialog != null) {
// Inialize the action bar
dialog.getActionBar().setDisplayHomeAsUpEnabled(true);
// Apply custom home button area click listener to close the PreferenceScreen because PreferenceScreens are dialogs which swallow
// events instead of passing to the activity
// Related Issue: https://code.google.com/p/android/issues/detail?id=4611
View homeBtn = dialog.findViewById(android.R.id.home);
if (homeBtn != null) {
OnClickListener dismissDialogClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
};
// Prepare yourselves for some hacky programming
ViewParent homeBtnContainer = homeBtn.getParent();
// The home button is an ImageView inside a FrameLayout
if (homeBtnContainer instanceof FrameLayout) {
ViewGroup containerParent = (ViewGroup) homeBtnContainer.getParent();
if (containerParent instanceof LinearLayout) {
// This view also contains the title text, set the whole view as clickable
((LinearLayout) containerParent).setOnClickListener(dismissDialogClickListener);
} else {
// Just set it on the home button
((FrameLayout) homeBtnContainer).setOnClickListener(dismissDialogClickListener);
}
} else {
// The 'If all else fails' default case
homeBtn.setOnClickListener(dismissDialogClickListener);
}
}
}
}
关于java - 将向上按钮添加到 PreferenceScreen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18155036/