在android嵌套的PreferenceScreen上显示/返回按钮?

时间:2013-01-07 06:02:40

标签: java android android-actionbar

我有两级PreferenceScreen:

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

我的问题是第二个屏幕没有自动显示操作栏上的后退/上移按钮。如何在adv_settings上显示向上按钮?

3 个答案:

答案 0 :(得分:7)

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

res / values-v11 / styles.xml:(或将这些添加到现有的styles.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对象,而不是当前可见的对象,因此动态设置箭头失败。

答案 1 :(得分:2)

这可能会有更多工作,但您可以创建两个PreferenceAtivity文件,每个文件都有自己的PreferenceFragment。每个PreferenceFragment都有自己的PreferenceScreen XML(第一级屏幕和第二级屏幕)。从第一级屏幕开始,您可以在标记内使用Intent启动第二个PreferenceActivity。在第二个PreferenceActivity中,您可以通过以下方式设置主页图标:

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)

答案 2 :(得分:0)

如果按钮没有自动出现,您可以像在这些链接上一样手动添加:

Android: How can make custom PreferenceScreen?

http://pastebin.com/334Eip35

在SO问题的第二个答案中有一个示例代码,其中的代码段可能来自另一个pastebin位置。