webentwicklung-frage-antwort-db.com.de

Das Navigationssymbol der Symbolleiste wurde nie festgelegt

Ich versuche die neue Toolbar-Komponente und habe Probleme mit dem Navigationssymbol ... Ich möchte ein benutzerdefiniertes Symbol für die Rückwärtsnavigation implementieren: 

In meinem Manifest habe ich einen Elternteil zu meiner Tätigkeit gesetzt: 

<activity Android:name=".CardsActivity" Android:parentActivityName=".MainActivity">
    <!-- Parent activity meta-data to support API level 7+ -->
    <meta-data
        Android:name="Android.support.PARENT_ACTIVITY"
        Android:value=".MainActivity" />
</activity>

Ich erkläre die Symbolleiste so: 

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.example.lollitest.MainActivity" >

    <Android.support.v7.widget.Toolbar
        Android:id="@+id/my_awesome_toolbar"
        Android:layout_height="wrap_content"
        Android:layout_width="match_parent"
        Android:minHeight="?attr/actionBarSize"
        Android:layout_marginBottom="10dp"
        Android:background="?attr/colorPrimary" />

    <TextView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_below="@+id/my_awesome_toolbar"
        Android:text="@string/hello_world" />

</RelativeLayout>

In meiner Aktivität konfiguriere ich die Toolbar folgendermaßen: 

Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
toolbar.setNavigationIcon(R.drawable.ic_good);
toolbar.setTitle("Title");
toolbar.setSubtitle("Sub");
toolbar.setLogo(R.drawable.ic_launcher);
setSupportActionBar(toolbar);

Was gibt mir: Toolbar with back button

Das hintere Symbol ist nicht das ich mit setNavigationIcon() eingestellt habe! Was auch immer gezeichnet werden kann, das Navigationssymbol ist immer der hintere Pfeil.

Ich habe versucht, die übergeordnete Assoziation im Manifest zu entfernen, aber der einzige Effekt besteht darin (offensichtlich), dass die Schaltfläche nicht zurückspringt.

Im Gegenteil, wenn ich das Standardpfeil-Symbol haben möchte und nicht setNavigationIcon() anrufe, habe ich überhaupt kein Symbol.

Wie gehe ich mit dem Navigationssymbol in der Symbolleiste (Benutzerdefiniert und Standard) richtig um?

HINWEIS: Ich führe meinen Test auf Android 4.4 aus

63
grunk

Derzeit können Sie es verwenden, um die Reihenfolge zu ändern: (scheint ein Fehler zu sein)

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

toolbar.setNavigationIcon(R.drawable.ic_good);
toolbar.setTitle("Title");
toolbar.setSubtitle("Sub");
toolbar.setLogo(R.drawable.ic_launcher);
113

Speziell für das Navigationssymbol ist dies die richtige Reihenfolge

// get the actionbar as Toolbar and set it up
Toolbar toolbar = (Toolbar) findViewById(R.id.signIn_toolbar);
setSupportActionBar(toolbar);

Informieren Sie die Symbolleiste, um eine Rückwärtsnavigation bereitzustellen. Dadurch wird das Symbol auf das Standard-Materialsymbol gesetzt

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

Überschreiben Sie später das Symbol mit dem benutzerdefinierten Symbol, in meinem Fall das Holo-Back-Symbol

toolbar.setNavigationIcon(R.drawable.ic_chevron_left_white_36dp);
23
Raffaeu

(Die Antwort an user802421)

private void setToolbar() {
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    if (toolbar != null) {
        setSupportActionBar(toolbar);
        toolbar.setNavigationIcon(R.drawable.ic_action_back);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });
    }
}

toolbar.xml

<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="@dimen/toolbar_height"
    Android:background="?attr/colorPrimaryDark" />
20
Alexey

Ich habe gerade die Lösung gefunden. Es ist wirklich sehr einfach:

mDrawerToggle.setDrawerIndicatorEnabled(false);

Ich hoffe es wird dir helfen.

4
xiaohu Wang

Verwenden Sie setNavigationIcon, um es zu ändern. Vergiss nicht, ActionBarDrawerToggle zuerst zu erstellen! 

beispielcode funktioniert für mich: 

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


    drawer = (DrawerLayout)findViewById(R.id.drawer_layout);

    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.setDrawerListener(toggle);

    toggle.syncState();

    toolbar.setNavigationIcon(R.drawable.ic_menu);
4
Nguyên Phạm

Ich habe versucht, die Toolbar wie @Gabriele Mariotti einzurichten, hatte aber Probleme mit dem Titel. Also habe ich dann bestellt

toolbar.setTitle("Title")
setSupportActionBar(toolbar);
toolbar.setNavigationIcon(R.drawable.ic_good);

und es funktioniert.

3

Sie können die invalidate()-Methode verwenden, um den Status der Symbolleiste an einer beliebigen Stelle zu ändern .____ Beispiel:

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

toolbar.setNavigationIcon(R.mipmap.arrow_white);
toolbar.invalidate();       // restore toolbar
3
Ovechkin Pavel

Ich hatte ein ähnliches Problem. Nach großen Kopfschmerzen stellte ich fest, dass mein ActionBarDrawerToggle das Symbol änderte, auch wenn es das Symbol nicht ändern sollte (weil ich der Umschaltkomponente keinen Verweis auf die Symbolleiste gegeben habe). Also in meiner NavigationDrawerFragment Klasse (die das Öffnen und Schließen behandelt) in setUp(...) Methode, die ich gesetzt habe
mDrawerToggle.setHomeAsUpIndicator(R.drawable.app_icon);
und endlich hat es geklappt.

3
Jakub Michalko

Ich habe die folgende Methode angewendet, was wirklich ein Rätsel aller oben genannten ist. Ich habe auch festgestellt, dass onOptionsItemSelected niemals aktiviert ist.

    mDrawerToggle.setDrawerIndicatorEnabled(false);
    getSupportActionBar().setHomeButtonEnabled(true);

    Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar);
    if (toolbar != null) {
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });
    }
3
Lettings Mall

Entfernen Sie diese Zeile aus der Aktivität, wenn Sie hinzugefügt haben

 @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        // Sync the toggle state after onRestoreInstanceState has occurred.
        mDrawerToggle.syncState();
    }

Dann setze das Icon 

 getSupportActionBar().setHomeAsUpIndicator(icon);
2
Nidhin

Wenn Sie die Symbolleiste nicht als Aktionsleiste festlegen möchten, können Sie Folgendes verwenden:

        val toggle = ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close)
        toggle.isDrawerSlideAnimationEnabled = false
        toggle.isDrawerIndicatorEnabled = false
        toggle.setHomeAsUpIndicator(AppCompatResources.getDrawable(this, ...))
        drawer!!.addDrawerListener(toggle)
        toggle.setToolbarNavigationClickListener {
            setDrawerOpened(!isDrawerOpened())
        }
        toggle.syncState()

fun setDrawerOpened(open: Boolean) {
    if (open == drawerLayout.isDrawerOpen(GravityCompat.START))
        return
    if (open)
        drawerLayout.openDrawer(GravityCompat.START)
    else drawerLayout.closeDrawer(GravityCompat.START)
}
0

arbeite für mich...

<Android.support.v7.widget.Toolbar
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:id="@+id/toolBar"
        Android:background="@color/colorGreen"
        app:title="Title"
        app:titleTextColor="@color/colorBlack"
        app:navigationIcon="@drawable/ic_action_back"/>
0

Versuche dies: 

  <Android.support.v7.widget.Toolbar xmlns:Android="http://schemas.Android.com/apk/res/Android"
        xmlns:toolbar="http://schemas.Android.com/apk/res-auto"
        Android:id="@+id/tool_drawer"
        Android:layout_width="match_parent"
        Android:layout_height="?actionBarSize"
        toolbar:navigationIcon="@drawable/ic_navigation">

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