V21 AppCompatライブラリを使用するようにアプリを変換しようとしているので、ActionBarの代わりにツールバーを使用し始めました。 (ActionBarActivityを拡張する)私のすべての通常のアクティビティでは、すべてがうまくいきます。しかし、PreferenceActivityを拡張するSettingsActivityでは、setSupportActionBar(actionbar)呼び出しを使用できません。「スタンドアロン」ツールバーを使用する必要があります。ツールバーは表示されますが、ツールバーに「home/up」ボタンを追加する方法がわかりません。
SettingsActivity.Java:
public class SettingsActivity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
Toolbar actionbar = (Toolbar) findViewById(R.id.actionbar);
if (null != actionbar) {
// In every other activity that extends ActionBarActivity I simply use:
// setSupportActionBar(actionbar);
// final ActionBar supportActionBar = getSupportActionBar();
// supportActionBar.setDisplayHomeAsUpEnabled(true);
// but in PreferenceActivity you need to add a standalone toolbar:
actionbar.setTitle(R.string.title_activity_settings);
actionbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SettingsActivity.this.finish();
}
});
// Inflate a menu to be displayed in the toolbar
actionbar.inflateMenu(R.menu.settings);
}
}
}
layout/activity_settings.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
tools:context=".SettingsActivity"
tools:menu="settings"
tools:actionBarNavMode="standard"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical">
<include
layout="@layout/actionbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"/>
<ListView
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:id="@Android:id/list" />
</LinearLayout>
layout/actionbar.xml:
<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.Toolbar
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/actionbar"
Android:layout_height="wrap_content"
Android:layout_width="match_parent"
Android:minHeight="?attr/actionBarSize"
Android:background="?attr/colorPrimaryDark"
app:theme="@style/AppTheme"
/>
menu/settings.xml:
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
tools:context="com.fletech.Android.redalert.SettingsActivity" >
</menu>
AndroidネストされたPreferenceScreen? にup/backボタンを表示する)==で説明されているように、actionBarStyleとdisplayOptionsをテーマに追加しようとしましたが、他の場所ではactionBarStyleはツールバーを使用するときに使用しますが、それらは正しいようです。
values/themes.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="AppTheme.Base"/>
<style name="AppTheme.Base" parent="Theme.AppCompat">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimary</item>
<item name="Android:windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="windowActionModeOverlay">true</item>
<!-- Set AppCompat’s actionBarStyle -->
<item name="actionBarStyle">@style/MyActionBar</item>
</style>
<style name="MyActionBar" parent="Widget.AppCompat.ActionBar">
<item name="displayOptions">showHome|homeAsUp|showTitle</item>
</style>
<resources>
@Pedro Oliveiraのソリューションは機能しました。 AppCompatライブラリが使用するドローアブルさえ見つけることができました(したがって、すでにapkに含まれています)。さらにミラー化されているため、ltrロケールとrtlロケールの両方で機能します。
actionbar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
@VictorYakuninの修正により、これがすべてです
public class SettingsActivity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
Toolbar actionbar = (Toolbar) findViewById(R.id.actionbar);
if (null != actionbar) {
actionbar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
actionbar.setTitle(R.string.title_activity_settings);
actionbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
NavUtils.navigateUpFromSameTask(SettingsActivity.this);
}
});
// Inflate a menu to be displayed in the toolbar
actionbar.inflateMenu(R.menu.settings);
}
}
}
?homeAsUpIndicator
の代わりにR.drawable.abc_ic_ab_back_mtrl_am_alpha
を使用できます:
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="?colorPrimary"
Android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:navigationIcon="?homeAsUpIndicator"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:title="@string/title"
/>
ここでパーティーに遅れる方法ですが、私はまだ0.02 $を提供します。 fragment
を使用してAppCompactActivity
の上矢印マークを表示するために、次の方法でそれを行いました。
((MainActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
アクティビティ内のonClickイベントを処理しますonOptionsItemSelected
_Manifest.xml
_で親アクティビティ名を提供し、Android 4.0以前をサポートするメタデータ)を提供すると、ナビゲーションアイコン(toolbar.setNavigationIcon(R.drawable.ic_action_back);
)を設定するだけで、作業。
Manifest.xmlの例:
_ <activity
Android:name=".MainActivity"
Android:label="@string/app_name" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
Android:name=".ProductActivity"
Android:label="@string/title_activity_product"
Android:parentActivityName=".MainActivity">
<meta-data
Android:name="Android.support.PARENT_ACTIVITY"
Android:value=".MainActivity" />
</activity>
_
ソリューションをありがとう、追加する唯一のポイントは、使用する方が良いということです
NavUtils.navigateUpFromSameTask(SettingsActivity.this);
ツールバーの背景パッチを定義します;)これは機能します。 toolbar_background.9.png
<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.Toolbar xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="@drawable/toolbar_background">
.....
21より古いAPIのXML属性Android:navigationIconまたはapp:navigationIconを試してください。