570

ActionBarアプリケーションで からに移行しToolbarています。Toolbarしかし、私が行ったように、戻る矢印でクリックイベントを表示および設定する方法がわかりませんActionbar

ここに画像の説明を入力

ActionBar、私は を呼び出しますmActionbar.setDisplayHomeAsUpEnabled(true)。しかし、これに似た方法はありません。

誰かがこの状況に直面したことがあり、どういうわけかそれを解決する方法を見つけましたか?

4

26 に答える 26

1017

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;
}
于 2014-10-30T14:55:22.903 に答える
238

多くの回答が表示されますが、これは以前に言及されていない私のものです。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);
}
于 2016-01-25T16:41:41.173 に答える
218

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
    }
});
于 2016-07-12T04:54:42.050 に答える
74

ツールバーの 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();
    }
});
于 2015-11-22T11:15:29.367 に答える
17

を使用してAppCompatActivityて、それが提供する自動を取得したくないため、使用しない道をたどった場合は、マテリアル デザインのニーズのために とまたはActionBarを分離したいため、次のことを考慮してください。ToolbarCoordinatorLayoutAppBarLayout

を引き続き使用できます。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);
} 
于 2015-09-26T17:31:28.593 に答える
9
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());
    }
于 2016-11-24T12:22:20.130 に答える
9

ツールバーに戻るボタンを表示するシンプルで簡単な方法

このコードを 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);
}
于 2018-04-15T06:04:15.473 に答える
1

問題を迅速かつ簡単に処理したい場合は、次の 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>

追加(タイトルバーやステータスバーではなく、ツールバーがカスタマイズさImageButtonToolbarていることを確認してください) - 必要に応じて 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 についてのプレビュー

ここに画像の説明を入力

于 2021-11-27T18:40:46.210 に答える
0

多分それは誰かを助けるでしょう、私が最後にやったことをアンサーに見つけられませんでした: with ActionBarDrawerToggle mDrawerToggle; ツールバー セットに戻る矢印を表示するには: mDrawerToggle.setDrawerIndicatorEnabled(false);

ツールバーにハンバーガーを表示する場合は、次のようにします。

mDrawerToggle.setDrawerIndicatorEnabled(true);

于 2020-11-19T12:56:00.397 に答える