13

我有一个两级 PreferenceScreen:

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

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

4

3 回答 3

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 对象,而不是当前可见的对象,因此动态设置箭头失败。

于 2013-04-27T00:37:39.137 回答
2

这可能需要更多工作,但您可以创建两个 PreferenceAtivity 文件,每个文件都有自己的 PreferenceFragment。每个 PreferenceFragment 都有自己的 PreferenceScreen XML(第一级屏幕和第二级屏幕)。从第一级屏幕中,您启动第二个 PreferenceActivity,并在标签内添加一个 Intent。在第二个 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)
于 2013-05-08T21:38:06.087 回答
0

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

Android:如何制作自定义 PreferenceScreen?

http://pastebin.com/334Eip35

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

于 2013-01-17T14:40:14.983 回答