13

私は2つのレベルのPreferenceScreenを持っています:

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

私の問題は、2 番目の画面のアクション バーに [戻る/上へ] ボタンが自動的に表示されないことです。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);

2 番目の画面が読み込まれると、現在表示されているものとは対照的に、getActionBar() が常に第 1 層の ActionBar オブジェクトを返すという Android のバグがあると思います。そのため、矢印の動的な設定は失敗します。

于 2013-04-27T00:37:39.137 に答える
2

これは手間がかかるかもしれませんが、それぞれ独自の PreferenceFragment を持つ 2 つの PreferenceAtivity ファイルを作成できます。各 PreferenceFragment には、独自の PreferenceScreen XML (第 1 レベルの画面と第 2 レベルの画面) があります。最初のレベルの画面から、タグ内のインテントを使用して 2 番目の PreferenceActivity を起動します。2 番目の 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の質問の2番目の回答にサンプルコードがあり、その中のスニペットはおそらく別のペーストビンの場所から取られています。

于 2013-01-17T14:40:14.983 に答える