603 Stimmen

Anzeigen des Zurück-Pfeils in der Symbolleiste

Ich migriere von ActionBar zu Toolbar in meiner Anwendung. Aber ich weiß nicht, wie ich den Zurück-Pfeil auf der Toolbar anzeigen und einen Klick-Ereignis darauf einstellen soll, wie ich es beim Actionbar gemacht habe.

Bildbeschreibung hier eingeben

Mit ActionBar rufe ich mActionBar.setDisplayHomeAsUpEnabled(true) auf. Aber es gibt keine ähnliche Methode dafür.

Hat jemand schon einmal diese Situation gemeistert und auf irgendeine Weise gelöst?

1051voto

MrEngineer13 Punkte 38472

Wenn Sie ein ActionBarActivity verwenden, können Sie Android mitteilen, dass Sie die Toolbar als ActionBar verwenden möchten, wie folgt:

Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
setSupportActionBar(toolbar);

Und dann funktionieren die Aufrufe an

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);

Man kann das auch in Fragmenten verwenden, die an ActionBarActivities angehängt sind, wie folgt:

((ActionBarActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
((ActionBarActivity) getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true);

Wenn Sie keine ActionBarActivities verwenden oder wenn Sie den Zurück-Pfeil auf einer Toolbar erhalten möchten, die nicht als Ihr SupportActionBar festgelegt ist, können Sie folgendes verwenden:

mActionBar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_action_back));
mActionBar.setNavigationOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
       //Was soll beim Klicken auf Zurück passieren
   }
});

Wenn Sie android.support.v7.widget.Toolbar verwenden, sollten Sie den folgenden Code zu Ihrem AppCompatActivity hinzufügen:

@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}

254voto

Vasil Valchev Punkte 5419

Ich sehe viele Antworten, aber hier ist meine, die nicht zuvor erwähnt wurde. Es funktioniert ab 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);

    // Füge einen Zurück-Pfeil zur Toolbar hinzu
    if (getSupportActionBar() != null){
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
    }
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Behandle den Klick auf den Pfeil hier
    if (item.getItemId() == android.R.id.home) {
        finish(); // Schließe diese Aktivität und kehre zur vorherigen Aktivität zurück (falls vorhanden)
    }

    return super.onOptionsItemSelected(item);
}

247voto

Igor Bubelov Punkte 5304

Es gibt viele Möglichkeiten, das zu erreichen, hier ist mein Favorit:

Layout:

Aktivität:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

toolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // Zurück-Taste gedrückt
    }
});

75voto

Sam Punkte 5767

Sie können die Methode setNavigationIcon der Symbolleiste verwenden. Android-Dokumentation

mToolBar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);

mToolBar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        handleOnBackPress();
    }
});

39voto

Linh Punkte 49889

Wenn Sie keine benutzerdefinierte Toolbar erstellen möchten, können Sie Folgendes tun

public class GalleryActivity extends AppCompatActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        ...  
        getSupportActionBar().setTitle("Bild auswählen");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == android.R.id.home) {
            finish();
        }
        return super.onOptionsItemSelected(item);
    }
}                     

In Ihrer AndroidManifest.xml

Sie können auch dieses android:theme="@style/Theme.AppCompat.Light" dem Tag hinzufügen, um es auf alle Aktivitäten anzuwenden

Bildbeschreibung hier eingeben

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X