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:
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
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);
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);
(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" />
Ich habe gerade die Lösung gefunden. Es ist wirklich sehr einfach:
mDrawerToggle.setDrawerIndicatorEnabled(false);
Ich hoffe es wird dir helfen.
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);
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.
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
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 habemDrawerToggle.setHomeAsUpIndicator(R.drawable.app_icon);
und endlich hat es geklappt.
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();
}
});
}
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);
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)
}
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"/>
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>