webentwicklung-frage-antwort-db.com.de

Wie zentriere ich die hintere Schaltfläche der Symbolleiste?

Ich habe ein Problem mit dem Versuch, die Zurück-Schaltfläche auf der Support-Symbolleiste zu zentrieren ... Ich benutze sie in einer ActionBarActivity.

<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/toolbar"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:background="?attr/colorPrimary"
    Android:minHeight="?attr/actionBarSize"
    toolbar:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    toolbar:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />

Und richten Sie die Navigationsnavigation in der onCreate() der Aktivität wie folgt ein:

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

getSupportActionBar().setTitle(R.string.title_activity_scanner);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

Was ich jedoch bekomme, ist folgendes: not centered back button screenshot Wie Sie sehen, ist die Zurück-Taste falsch platziert

Edit: Das Problem scheint in einem benutzerdefinierten Wert für ?attr/actionBarSize zu liegen, der auf 40dp eingestellt ist. Es stellt sich jedoch heraus, dass der Titel stattdessen falsch platziert ist.

28
mewa

Aus dem developer.Android.com :

Die Symbolleiste unterstützt ein stärker fokussiertes Feature-Set als ActionBar. Von Anfang an Zum Abschluss kann eine Symbolleiste eine Kombination der folgenden optionalen Optionen enthalten Elemente:

Eine Navigationsschaltfläche. Dies kann ein Aufwärtspfeil sein, ein Umschalten des Navigationsmenüs, schließen, reduzieren, fertig oder eine andere Glyphe nach Wahl der App. Diese Die Schaltfläche sollte immer für den Zugriff auf andere Navigationsziele verwendet werden innerhalb des Containers der Toolbar und ihres gekennzeichneten Inhalts oder Andernfalls belassen Sie den aktuellen Kontext durch die Symbolleiste. Das Die Navigationsschaltfläche ist innerhalb des Minimums der Symbolleiste vertikal ausgerichtet Höhe, falls eingestellt.

Wenn Sie also das Attribut minHeight auf die Höhe der Symbolleiste setzen (layout_height), wird der hintere Pfeil vertikal zentriert.

69
Rick Sanchez

In ActionBarActivity

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
  setSupportActionBar(toolbar);
  getSupportActionBat().setTitle("Hello World"); 
  getSupportActionBar().setDisplayHomeAsUpEnabled(true);
  getSupportActionBar().setHomeButtonEnabled(true);

Layoutcode: 

<Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="?attr/actionBarSize"
        Android:background="@color/primary"
        app:theme="@style/ToolbarTheme"
        app:popupTheme="@style/Theme.AppCompat"/>

Und stil: 

 <style name="AppTheme.Base" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primaryDark</item>
    <item name="Android:windowNoTitle">true</item>
    <item name="Android:windowActionBar">false</item>
    <item name="windowActionBar">false</item>
</style>

<style name="AppTheme" parent="AppTheme.Base">

Denken Sie daran, dass es sich bei der Symbolleiste nur um eine Ansichtsgruppe handelt, so dass Sie sie beliebig gestalten können. Hier ist ein Bildlink: Beispiel der Symbolleiste

Ich hoffe es hilft.

2
kamilmasta

Um dies zu erreichen, entfernen Sie die normale Schaltfläche "Zurück" aus der Symbolleiste und fügen eine benutzerdefinierte Image-Schaltfläche in Ihr XML-Layout ein, und legen Sie ein Bild fest. Sie können diesen ImageButtton an beliebiger Stelle in der Symbolleiste platzieren.

Ihr Aktivitätslayoutcode sollte ungefähr so ​​aussehen.

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <include
        Android:id="@+id/toolbar"
        layout="@layout/toolbar" />

    <ImageButton
        Android:layout_width="60dp"
        Android:layout_height="60dp"
        Android:id="@+id/button"
        Android:src="@drawable/attach_icon"
        Android:layout_alignParentTop="true"
        Android:layout_centerHorizontal="true" />

</RelativeLayout>
1
Pruthviraj

Die Antwort von @Rick Sanchez funktioniert, das Layout_height der Toolbar ist genauso wie bei minHeight

Ich habe in Toolbar-Konstruktor gefunden, dass ein Feld die Schaltfläche Schwerkraft einrichten kann, mButtonGravity = a.getInteger(R.styleable.Toolbar_buttonGravity, Gravity.TOP);

, aber die Unterstützung für die v7-Symbolleiste kann nicht eingerichtet werden mButtonGravity = Gravity.TOP;

0
act262

Piggybacking von @Rick Sanchez answer - Wenn Sie die Größe des minHeight-Attributs der Toolbar kennen, können Sie Folgendes verwenden:

Android:gravity="top"
app:titleMarginTop="@dimen/margin_to_center"

in der Symbolleiste, um den Text zu zentrieren. Wenn Sie Android:minHeight="?actionBarSize" verwenden, wäre dies etwa 13p

0
AllDayAmazing

Für mich funktionierte keine der Lösungen. In meinem Fall war das Problem die Marge, die ich angewendet habe:

 <Android.support.v7.widget.Toolbar
     Android:layout_width="match_parent"
     Android:layout_height="wrap_content"
     ... >

     <View
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_marginBottom="10dp"
        Android:layout_marginTop="10dp" />

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

Nach dem direkten Anwenden auf die Symbolleiste wurde die Schaltfläche vertikal zentriert:

 <Android.support.v7.widget.Toolbar
     Android:layout_width="match_parent"
     Android:layout_height="wrap_content"
     Android:layout_marginBottom="10dp"
     Android:layout_marginTop="10dp"
     ... >

     <View
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content" />

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

stellen Sie die Schaltflächengröße 56dp ein und setzen Sie scaleType auf center ohne Ränder auf Appbar Stellen Sie sicher, dass Ihr Symbol 24x24-Abmessungen ist

0
Mahdi Astanei