在Android嵌套的首选项屏幕上显示/后退按钮?

2022-09-04 22:24:04

我有一个两级首选项屏幕:

<PreferenceScreen>
general settings
   <PreferenceScreen android:key="adv_settings">
   more advanced settings
   </PreferenceScreen>
</PreferenceScreen>

我的问题是第二个屏幕不会自动显示操作栏上的备份/向上按钮。如何使向上按钮显示在adv_settings上?


答案 1

可以通过编写要与应用程序主题一起使用的自定义 ActionBar 样式来添加箭头。

res/values-v11/styles.xml:(或将这些添加到现有样式.xml)

<?xml version="1.0" encoding="utf-8"?>
<resources>    
  <style name="MyTheme" parent="@android:style/Theme.Holo.Light">
    <item name="android:actionBarStyle">@style/MyActionBar</item>
  </style>

  <style name="MyActionBar" parent="@android:style/Widget.Holo.ActionBar">
    <item name="android:displayOptions">showHome|homeAsUp|showTitle</item>
  </style>
</resources>

然后在您的 AndroidManifest 中应用此主题.xml:

<application android:theme="@style/MyTheme">


注意:添加此箭头的明显方法应该是调用:

getActionBar().setDisplayHomeAsUpEnabled(true);

加载第二个屏幕后,但我认为存在一个Android错误,其中getActionBar()始终返回第一层ActionBar对象,而不是当前可见的对象,因此动态设置箭头失败。


答案 2

这可能需要更多的工作,但您可以创建两个PpreferencesAtivity文件,每个文件都有自己的PpreferencesFragment。每个PreferencesFragment都有自己的PreferencesScreen XML(第一级屏幕和第二级屏幕)。从第一级屏幕开始,您启动第二个首选项活动,标签中带有意向。在第二个首选项活动中,您可以通过执行以下操作来设置主页图标:

ActionBar bar = getActionBar();
bar.setDisplayHomeAsUpEnabled(true);

然后还有一个主页按钮的处理程序:

@Override
public boolean onOptionsItemSelected(MenuItem item)
{
    if (item.getItemId() == android.R.id.home) {
        finish();
    }

    return false;
}

资产:

FirstPreferenceActivty
FirstPreferenceFragment
pref_first.xml (layout with PreferenceScreen and Prefernce nodes)

SecondPreferenceActivty
SecondPreferenceFragment
pref_second.xml (layout with PreferenceScreen and Prefernce nodes)

推荐