ActionBar
アプリケーションで からに移行しToolbar
ています。Toolbar
しかし、私が行ったように、戻る矢印でクリックイベントを表示および設定する方法がわかりませんActionbar
。
でActionBar
、私は を呼び出しますmActionbar.setDisplayHomeAsUpEnabled(true)
。しかし、これに似た方法はありません。
誰かがこの状況に直面したことがあり、どういうわけかそれを解決する方法を見つけましたか?
ActionBar
アプリケーションで からに移行しToolbar
ています。Toolbar
しかし、私が行ったように、戻る矢印でクリックイベントを表示および設定する方法がわかりませんActionbar
。
でActionBar
、私は を呼び出しますmActionbar.setDisplayHomeAsUpEnabled(true)
。しかし、これに似た方法はありません。
誰かがこの状況に直面したことがあり、どういうわけかそれを解決する方法を見つけましたか?
If you are using an ActionBarActivity
then you can tell Android to use the Toolbar
as the ActionBar
like so:
Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
setSupportActionBar(toolbar);
And then calls to
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
will work. You can also use that in Fragments that are attached to ActionBarActivities
you can use it like this:
((ActionBarActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
((ActionBarActivity) getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true);
If you are not using ActionBarActivities
or if you want to get the back arrow on a Toolbar
that's not set as your SupportActionBar
then you can use the following:
mActionBar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_action_back));
mActionBar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//What to do on back clicked
}
});
If you are using android.support.v7.widget.Toolbar
, then you should add the following code to your AppCompatActivity
:
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
多くの回答が表示されますが、これは以前に言及されていない私のものです。API 8 以降で動作します。
public class DetailActivity extends AppCompatActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
// toolbar
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// add back arrow to toolbar
if (getSupportActionBar() != null){
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// handle arrow click here
if (item.getItemId() == android.R.id.home) {
finish(); // close this activity and return to preview activity (if there is any)
}
return super.onOptionsItemSelected(item);
}
There are many ways to achieve that, here is my favorite:
Layout:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:navigationIcon="?attr/homeAsUpIndicator" />
Activity:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// back button pressed
}
});
ツールバーの setNavigationIcon メソッドを使用できます。 Android ドキュメント
mToolBar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
mToolBar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handleOnBackPress();
}
});
を使用していAppCompatActivity
て、それが提供する自動を取得したくないため、使用しない道をたどった場合は、マテリアル デザインのニーズのために とまたはActionBar
を分離したいため、次のことを考慮してください。Toolbar
CoordinatorLayout
AppBarLayout
を引き続き使用できます。xml でAppCompatActivity
を使用できるようにするためだけに、使用を停止する必要はありません<android.support.v7.widget.Toolbar>
。次のように、アクション バースタイルをオフにするだけです。
まず、あなたが好きな NoActionBar テーマの 1 つからスタイルを派生させます。私は次のようstyles.xml
に使用しました。Theme.AppCompat.Light.NoActionBar
<style name="SuperCoolAppBarActivity" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/primary</item>
<!-- colorPrimaryDark is used for the status bar -->
<item name="colorPrimaryDark">@color/primary_dark</item>
...
...
</style>
アプリのマニフェストで、次のように、定義したばかりの子スタイル テーマを選択します。
<activity
android:name=".activity.YourSuperCoolActivity"
android:label="@string/super_cool"
android:theme="@style/SuperCoolAppBarActivity">
</activity>
アクティビティ Xml で、ツールバーが次のように定義されている場合:
...
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
/>
...
次に、これが重要な部分です。拡張する AppCompatActivity にサポート アクション バーを設定して、xml のツールバーがアクション バーになるようにします。メニュー、自動アクティビティ タイトル、アイテム選択処理など、ActionBar で許可されている多くのことを、カスタム クリック ハンドラなどを追加する必要なく簡単に実行できるため、これはより良い方法だと思います。
アクティビティの onCreate オーバーライドで、次の操作を行います。
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_super_cool);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//Your toolbar is now an action bar and you can use it like you always do, for example:
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
MyActivity extends AppCompatActivity {
private Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
toolbar = (Toolbar) findViewById(R.id.my_toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
toolbar.setNavigationOnClickListener(arrow -> onBackPressed());
}
ツールバーに戻るボタンを表示するシンプルで簡単な方法
このコードを onCreate メソッドに貼り付けます
if (getSupportActionBar() != null){
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
このオーバーライド メソッドを onCreate メソッドの外に貼り付けます
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId()== android.R.id.home) {
finish();
}
return super.onOptionsItemSelected(item);
}
問題を迅速かつ簡単に処理したい場合は、次の 3 つの手順に従ってください。
以下のいくつかのコードを使用して、ファイル ic_arrow.xml を Drawable フォルダーに追加します (以下のコードを ic_arrow.xml に追加します)。
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:width="24dp"
android:height="24dp"
android:tint="@color/black"
android:viewportWidth="24"
android:viewportHeight="24"
tools:ignore="ExtraText">
<path
android:fillColor="@android:color/white"
android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z" />
</vector>
追加(タイトルバーやステータスバーではなく、ツールバーがカスタマイズさImageButton
れToolbar
ていることを確認してください) - 必要に応じて ImageButton (矢印ボタン) の位置をカスタマイズできます
<ImageButton
android:id="@+id/arrow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_arrow"
android:layout_marginTop="15dp"
android:layout_marginStart="15dp"
android:background="@android:color/transparent"
tools:ignore="ContentDescription" />
setArrowButton
メソッドをDetailActivity.java
(または必要な xxxActivity.java に)追加します。
public class DetailActivity extends AppCompatActivity {
ImageButton arrowButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
arrowButton = findViewById(R.id.arrow);
setArrowButton(arrowButton);
}
public void setArrowButton(ImageButton arrowButton) {
arrowButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish(); //will close the moment activity and return to
//the last activity
}
});
}
}
終わり
arrowButton についてのプレビュー
多分それは誰かを助けるでしょう、私が最後にやったことをアンサーに見つけられませんでした: with ActionBarDrawerToggle mDrawerToggle; ツールバー セットに戻る矢印を表示するには: mDrawerToggle.setDrawerIndicatorEnabled(false);
ツールバーにハンバーガーを表示する場合は、次のようにします。
mDrawerToggle.setDrawerIndicatorEnabled(true);