Zeigen Sie den Pfeil nach hinten in der Symbolleiste an

496

Ich migriere in meiner Anwendung von ActionBarnach Toolbar. Aber ich weiß nicht, wie ich das Klickereignis auf dem Pfeil nach hinten anzeigen und aktivieren soll, Toolbarwie ich es getan habe Actionbar.

Geben Sie hier die Bildbeschreibung ein

Mit ActionBarrufe ich an mActionbar.setDisplayHomeAsUpEnabled(true). Aber es gibt keine ähnliche Methode wie diese.

Hat sich jemals jemand dieser Situation gestellt und irgendwie einen Weg gefunden, sie zu lösen?

Huy Duong Tu
quelle
Wie wäre es mit stackoverflow.com/a/29809691/1644301
mDroidd
Verwenden Sie das Beispiel getSupportActionBar () hier freakyjolly.com/how-to-add-back-arrow-in-android-activity
Code Spy
In Verbindung stehender Beitrag - Wie man ein
RBT

Antworten:

900

Wenn Sie ein verwenden ActionBarActivity, können Sie Android anweisen, das Toolbarwie folgt zu verwenden ActionBar:

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

Und ruft dann an

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

wird funktionieren. Sie können dies auch in Fragmenten verwenden, die an ActionBarActivitiesSie angehängt sind. Sie können es folgendermaßen verwenden:

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

Wenn Sie nicht verwenden ActionBarActivitiesoder wenn Sie den Zurückpfeil auf einem Toolbarnicht als Ihr eingestellten Pfeil erhalten möchten, SupportActionBarkönnen Sie Folgendes verwenden:

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
   }
});

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

@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}
MrEngineer13
quelle
12
Googles offizielles Material Design Icon Repo github.com/google/material-design-icons/blob/master/navigation/…
MrEngineer13
70
Wenn Sie die neueste Version von appcompat-v7 (21.0.3 oder höher) verwenden, können Sie R.drawable.abc_ic_ab_back_mtrl_am_alpha für zurückziehbare Pfeile verwenden, die in der Support-Bibliothek enthalten sind.
Taeho Kim
23
Bitte beachten Sie, dass getResources (). GetDrawable (...) veraltet ist. Sie sollten stattdessen ContextCompat.getDrawable (context, ...) verwenden.
Quentin S.
7
Funktioniert nicht, kann nicht finden , weder R.drawable.abc_ic_ab_back_mtrl_am_alphaweder R.drawable.ic_action_back.
Henrique de Sousa
10
um "zurück" Symbol aus der Support-Bibliothek zu bekommen toolbar.setNavigationIcon(android.support.v7.appcompat.R.drawable.abc_ic_ab_back_material);
Bolein95
215

Ich sehe viele Antworten, aber hier ist meine, die vorher nicht 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);

    // 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);
}
Vasil Valchev
quelle
3
Dies funktioniert nur, wenn Sie die Symbolleiste als Aktionsleiste festlegen. Es ist nicht für eigenständige Symbolleisten.
Kuffs
20
Upvote for onOptionItemSelected()Damit ist das abgeschlossen, was MrEngineer13 in seiner Antwort nicht behandelt hat.
Atul
2
Danke, das hat bei mir funktioniert. Scheint besser zu sein als Click Listener zu verwenden, ich interessiere mich nicht wirklich für eigenständige Symbolleisten
Mike76
Wie kann ich die Farbe des Pfeils ändern?
Dmitry
Ich brauchte die Zeilen unter der Kommentarzeile "Symbolleiste" nicht, funktioniert gut.
Hack06
173

Es gibt viele Möglichkeiten, dies zu erreichen. Hier ist mein Favorit:

Layout:

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    app:navigationIcon="?attr/homeAsUpIndicator" />

Aktivität:

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

    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // back button pressed
        }
    });
Igor Bubelov
quelle
13
Die Verwendung des Theme-Attributs ist viel besser als die meisten anderen Vorschläge in dieser Frage
Pedro Loureiro
3
Anstatt zu verwenden setNavigationOnClickListener(), können Sie case android.R.id.home:in 'onOptionsItemSelected ()' hinzufügen.
Eugene
1
case android.R.id.homehat bei mir nicht funktioniert. Nach einer Weile der Suche hat Ihre Antwort den Trick getan. Danke.
DJ
Dies ist die authentischste Lösung, insbesondere wenn Sie das Standard-Zurück-Symbol des Android-Systems verwenden möchten.
Nauman Aslam
using toolbar.setNavigationOnClickListener {onBackPressed ()}
filthy_wizard
74

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

mToolBar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);

mToolBar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        handleOnBackPress();
    }
});
Sam
quelle
1
Könnten Sie bitte Ihrer Antwort eine Erklärung hinzufügen? Nur-Code-Antworten sind bei SO verpönt.
Hupen
1
Bitte beachten Sie, dass die Methode setNavigationOnClickListener()in API Level 21 und höher hinzugefügt wurde
Ali Mehrpour
3
R.drawable.abc_ic_ab_back_mtrl_am_alpha ist jetzt in Support 23.2.0 verschwunden. Verwenden Sie stattdessen die akzeptierte Antwort.
Mailand
25

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

public class GalleryActivity extends AppCompatActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        ...  
        getSupportActionBar().setTitle("Select Image");
        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 Ihnen AndroidManifest.xml

<activity
    android:name=".GalleryActivity"
    android:theme="@style/Theme.AppCompat.Light">        
</activity>

Sie können dies auch android:theme="@style/Theme.AppCompat.Light"als <aplication>Tag setzen, um es auf alle Aktivitäten anzuwenden

Geben Sie hier die Bildbeschreibung ein

Phan Van Linh
quelle
2
Danke fürif (item.getItemId() == android.R.id.home)
Adizbek Ergashev
22
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    toolbar.setNavigationIcon(R.drawable.back_arrow); // your drawable
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onBackPressed(); // Implemented by activity
        }
    });

Und für API 21+ android:navigationIcon

<android.support.v7.widget.Toolbar
    android:navigationIcon="@drawable/back_arrow"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"/>
Ilya Gazman
quelle
Sollte die akzeptierte Antwort sein.
Anton Malyshev
17

Ich habe diese Methode aus der Google Developer-Dokumentation verwendet :

@Override
public void onCreate(Bundle savedInstanceState) {
  ...
  getActionBar().setDisplayHomeAsUpEnabled(true);
}

Wenn Sie eine Nullzeigerausnahme erhalten, kann dies vom Thema abhängen. Versuchen Sie es mit einem anderen Thema im Manifest oder verwenden Sie dieses alternativ:

@Override
public void onCreate(Bundle savedInstanceState) {
  ...
  getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

Dann im Manifest, wo ich die übergeordnete Aktivität für die aktuelle Aktivität festlege:

<activity
        android:name="com.example.myapp.MyCurrentActivity"
        android:label="@string/title_activity_display_message"
     android:parentActivityName="com.example.myfirstapp.MainActivity" >
    <!-- Parent activity meta-data to support 4.0 and lower -->
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.myapp.MyMainActivity" />
</activity>

Ich hoffe, dies wird dir helfen!

Paolo Anghileri
quelle
1
Der Google Docs Link und das hat getSupportActionBar()funktioniert. Vielen Dank!
Rick
15

Wenn Sie es verwendet AppCompatActivityhaben und den Weg gegangen sind, es nicht zu verwenden, weil Sie nicht die Automatik erhalten ActionBarmöchten, die es bietet, weil Sie das Toolbaraufgrund Ihrer Materialdesign-Anforderungen trennen möchten, und CoordinatorLayoutoder AppBarLayoutdann Folgendes berücksichtigen:

Sie können das weiterhin verwenden AppCompatActivity, Sie müssen es nicht beenden, nur damit Sie ein <android.support.v7.widget.Toolbar>in Ihrer XML verwenden können. Schalten Sie einfach den Stil der Aktionsleiste wie folgt aus:

Leiten Sie zunächst einen Stil aus einem der NoActionBar-Themen ab, die Sie in Ihrem Thema mögen styles.xml. Ich habe es Theme.AppCompat.Light.NoActionBarso verwendet:

<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>

Wählen Sie im Manifest Ihrer App das soeben definierte untergeordnete Thema aus:

    <activity
        android:name=".activity.YourSuperCoolActivity"
        android:label="@string/super_cool"
        android:theme="@style/SuperCoolAppBarActivity">
    </activity>

Wenn in Ihrer Aktivitäts-XML die Symbolleiste wie folgt definiert ist:

...
    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        />
...

Dann, und dies der wichtigste Teil ist, Sie setzen die Unterstützung Aktionsleiste auf die AppCompatActivity , dass Sie erstreckt, so dass die Symbolleiste in Ihrem xml, wird die Bar Aktion. Ich bin der Meinung, dass dies ein besserer Weg ist, da Sie einfach die vielen Dinge tun können, die ActionBar zulässt, wie Menüs, automatische Aktivitätstitel, Handhabung der Elementauswahl usw., ohne benutzerdefinierte Klick-Handler usw. hinzufügen zu müssen.

Gehen Sie in der onCreate-Überschreibung Ihrer Aktivität wie folgt vor:

@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);
} 
Dhiraj Gupta
quelle
8
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());
    }
Artemiy
quelle
Sie können Retrolambda verwenden.
Artemiy
Das ist was ich habe und es funktioniert nicht. Ich kann es nicht herausfinden.
filthy_wizard
7

Einfache und einfache Möglichkeit, die Schaltfläche "Zurück" in der Symbolleiste anzuzeigen

Fügen Sie diesen Code in die onCreate-Methode ein

 if (getSupportActionBar() != null){

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

Fügen Sie diese Überschreibungsmethode außerhalb der onCreate-Methode ein

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if(item.getItemId()== android.R.id.home) {

        finish();
    }
    return super.onOptionsItemSelected(item);
}
Waheed Sabir
quelle
7

In Kotlin wäre es

private fun setupToolbar(){
    toolbar.title = getString(R.string.YOUR_TITLE)
    setSupportActionBar(toolbar)
    supportActionBar?.setDisplayHomeAsUpEnabled(true)
    supportActionBar?.setDisplayShowHomeEnabled(true)
}

// don't forget click listener for back button
override fun onSupportNavigateUp(): Boolean {
    onBackPressed()
    return true
}
gprathour
quelle
6

Leicht können Sie es tun.

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

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}

Credits: https://freakycoder.com/android-notes-24-how-to-add-back-button-at-toolbar-941e6577418e

Euler Tiago
quelle
5

In der können Sie AppCompatActivityzum Beispiel tun

public class GrandStatActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_grand_stat);
    }

    @Override
    public void onResume() {
        super.onResume();

        // Display custom title
        ActionBar actionBar = this.getSupportActionBar();
        actionBar.setTitle(R.string.fragment_title_grandstats);

        // Display the back arrow
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
    }

    // Back arrow click event to go to the parent Activity
    @Override
    public boolean onSupportNavigateUp() {
        onBackPressed();
        return true;
    }

}
Entwickler
quelle
4

In Ihrer Manifestdatei für die Aktivität, bei der Sie eine Zurück-Schaltfläche hinzufügen möchten, verwenden wir die Eigenschaft android: parentActivityName

        <activity
        android:name=".WebActivity"
        android:screenOrientation="portrait"
        android:parentActivityName=".MainActivity"
        />

PS Dieses Attribut wurde in API Level 16 eingeführt.

Sunny Kumar Aditya
quelle
3

Das hat perfekt funktioniert

public class BackButton extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.chat_box);
        Toolbar chatbox_toolbar=(Toolbar)findViewById(R.id.chat_box_toolbar);
        chatbox_toolbar.setTitle("Demo Back Button");
        chatbox_toolbar.setTitleTextColor(getResources().getColor(R.color.white));
        setSupportActionBar(chatbox_toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        chatbox_toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //Define Back Button Function
            }
        });
    }
}
Vikash Sharma
quelle
3

Zuerst müssen Sie die Symbolleiste initialisieren:

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

Rufen Sie dann die Zurück-Taste in der Aktionsleiste auf:

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

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

Wenn Sie den Zurückpfeil auf einer Symbolleiste erhalten möchten, die nicht als SupportActionBar festgelegt ist:

(Kotlin)

val resId = getResIdFromAttribute(toolbar.context, android.R.attr.homeAsUpIndicator)
toolbarFilter.navigationIcon = ContextCompat.getDrawable(toolbar.context, resId)
toolbarFilter.setNavigationOnClickListener { fragmentManager?.popBackStack() }

um res von Attributen zu erhalten:

@AnyRes
fun getResIdFromAttribute(context: Context, @AttrRes attr: Int): Int {
    if (attr == 0) return 0
    val typedValueAttr = TypedValue()
    context.theme.resolveAttribute(attr, typedValueAttr, true)
    return typedValueAttr.resourceId
}
John
quelle
1

Fügen Sie dies der XML-Datei der Aktivität im Layoutordner hinzu:

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">
    <android.support.v7.widget.Toolbar
        android:id="@+id/prod_toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>

Machen Sie die Symbolleiste anklickbar und fügen Sie diese der onCreate-Methode hinzu:

Toolbar toolbar = (Toolbar) findViewById(R.id.prod_toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        finish();
    }
});
Yang
quelle
1

Möglicherweise eine zuverlässigere Methode, um das Up-Symbol aus Ihrem Thema abzurufen (wenn Sie die Symbolleiste nicht als Aktionsleiste verwenden):

toolbar.navigationIcon = context.getDrawableFromAttribute(R.attr.homeAsUpIndicator)

Um das Themenattribut in ein Zeichenobjekt umzuwandeln, habe ich eine Erweiterungsfunktion verwendet:

fun Context.getDrawableFromAttribute(attributeId: Int): Drawable {
    val typedValue = TypedValue().also { theme.resolveAttribute(attributeId, it, true) }
    return resources.getDrawable(typedValue.resourceId, theme)
}
danwilkie
quelle
0

Wenn Sie DrawerLayout mit ActionBarDrawerToggle verwenden , müssen Sie diesen Code in Ihre Aktivität einfügen , um die Schaltfläche Zurück anstelle der Schaltfläche Menü (und umgekehrt) anzuzeigen:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // ...

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.application_name, R.string.application_name);
    mDrawerLayout.addDrawerListener(mDrawerToggle);

    mDrawerToggle.setHomeAsUpIndicator(R.drawable.ic_arrow_back_white_32dp);
    mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            onBackPressed(); // Or you can perform some other action here when Back button is clicked.
        }
    });
    mDrawerToggle.syncState();
    // ...
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (mDrawerToggle.onOptionsItemSelected(item))
        return true;

    switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            return true;
        // ...
    }

    return super.onOptionsItemSelected(item);
}

public void showBackInToolbar(boolean isBack) {
    // Remove next line if you still want to be able to swipe to show drawer menu.
    mDrawerLayout.setDrawerLockMode(isBack ? DrawerLayout.LOCK_MODE_LOCKED_CLOSED : DrawerLayout.LOCK_MODE_UNLOCKED);
    mDrawerToggle.setDrawerIndicatorEnabled(!isBack);
    mDrawerToggle.syncState();
}

Wenn Sie also die Schaltfläche Zurück anstelle der Schaltfläche Menü anzeigen müssen , rufen Sie showBackInToolbar (true) auf . Wenn Sie die Schaltfläche Menu benötigen , rufen Sie showBackInToolbar (false) auf .

Sie können generieren zurück Pfeil (ic_arrow_back_white_32dp) hier , Suche arrow_back in Clipart Abschnitt (Standard verwenden 32DP mit 8DP padding). Wählen Sie einfach die gewünschte Farbe.

Borzh
quelle
0

Sie können jederzeit ein Relative layoutoder ein Linear Layoutin Ihr ToolbarSymbol einfügen und eine Bildansicht für das Zurück-Symbol oder ein Schließsymbol an einer beliebigen Stelle in der Symbolleiste platzieren

Zum Beispiel habe ich das relative Layout in meiner Symbolleiste verwendet

 <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar_top"
                android:layout_width="match_parent"
                android:layout_height="35dp"
                android:minHeight="?attr/actionBarSize"
                android:nextFocusDown="@id/netflixVideoGridView"
                app:layout_collapseMode="pin">

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">


                    <TextView

                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Myflix"
                        android:textAllCaps="true"
                        android:textSize="19sp"
                        android:textColor="@color/red"
                        android:textStyle="bold" />


                    <ImageView
                        android:id="@+id/closeMyFlix"
                        android:layout_alignParentRight="true"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        app:srcCompat="@drawable/vector_close" />


                </RelativeLayout>

            </android.support.v7.widget.Toolbar>

Und es sieht so aus:

Geben Sie hier die Bildbeschreibung ein

Sie können in dieser Bildansicht einen Klick-Listener aus Aktivität oder Fragment wie diesem hinzufügen.

  closeMyFlix.setOnClickListener({
            Navigator.instance.showFireTV(  activity!!.supportFragmentManager)
        })
Hitesh Sahu
quelle
0

Mit Kotlin wurde es:

Xml:

<include
android:id="@+id/tbSignToolbar "
layout="@layout/toolbar_sign_up_in"/>

In Ihrer Aktivität: -

setSupportActionBar(tbSignToolbar as Toolbar?)//tbSignToolbar :id of your toolbar 
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true)
wissem miled
quelle
0

Wenn Sie JetPack Navigation verwenden.

Hier ist das Layout für MainActivity

<androidx.constraintlayout.widget.ConstraintLayout 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"
                                               android:layout_width="match_parent"
                                               android:layout_height="match_parent"
                                               tools:context=".MainActivity">

<androidx.appcompat.widget.Toolbar
        android:id="@+id/toolBar"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

</androidx.appcompat.widget.Toolbar>

<fragment
        android:id="@+id/my_nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:defaultNavHost="true"
        app:layout_constraintTop_toBottomOf="@id/toolBar"
        app:layout_constraintBottom_toTopOf="parent"
        app:navGraph="@navigation/nav_graph"/>

Richten Sie Ihre Symbolleiste in Ihrer Aktivität wie unten in onCreate () Ihrer Aktivitätsklasse ein.

val navHostFragment = supportFragmentManager
        .findFragmentById(R.id.my_nav_host_fragment) as NavHostFragment? ?: return

val navController = navHostFragment.findNavController()
val toolBar = findViewById<Toolbar>(R.id.toolBar)
setSupportActionBar(toolBar) // To set toolBar as ActionBar
setupActionBarWithNavController(navController)

setupActionBarWithNavController (navController) Erstellt bei Bedarf eine Zurück-Schaltfläche in der ToolBar und übernimmt die BackButton-Funktionalität. Wenn Sie eine CustomBack-Funktionalität schreiben müssen, erstellen Sie ein callBack wie unten beschrieben für Ihre fragment onCreate () -Methode

val callback = requireActivity().onBackPressedDispatcher.addCallback(this) {
        // Handle the back button event
    }

Aus der Dokumentation: https://developer.android.com/guide/navigation/navigation-custom-back

Prakash
quelle
0

Wenn Sie das verwenden, verwenden Sie androidx.appcompat.app.AppCompatActivityeinfach:

Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

Dann definieren Sie einfach in Manifest.xmlder übergeordneten Aktivität.

<activity
    android:name=".MyActivity"
    ...>
  <meta-data
      android:name="android.support.PARENT_ACTIVITY"
      android:value=".ParentActivity" />
</activity>

Wenn Sie stattdessen ein verwenden Toolbarund ein benutzerdefiniertes Verhalten wünschen, verwenden Sie einfach:

<androidx.appcompat.widget.Toolbar
    android:id="@+id/toolbar" 
    app:navigationIcon="?attr/homeAsUpIndicator"
    .../>

und in Ihrer Aktivität:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //....
    }
});
Gabriele Mariotti
quelle