Ich stellte eine ähnliche Frage: hier ... Ich habe einige Tutorials in den Antworten. Aber diese Frage ist unterschiedlich. weil keine dieser Methoden in meinem Projekt nicht funktioniert.
Ich möchte alle Symbole in der Symbolleiste zentrieren
Ich teste alle verfügbaren Möglichkeiten ... aber immer schweben Symbole in links.
Ich möchte Zentrierungssymbole (ich ziehe es vor, dass das linke Symbol rechts und das andere Symbol rechts und andere Symbole Mitte zentriert sind).
Activity.Main.xml
<LinearLayout 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:orientation="vertical" // I add vertical
tools:context=".MainActivity">
<include
Android:id="@+id/tool_bar"
layout="@layout/tool_bar"
Android:layout_height="wrap_content"
Android:layout_width="match_parent" // I add match_parent
Android:layout_gravity="center" /> // I add center
</LinearLayout>.
Auch in tool_bar.xml
<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.Toolbar
Android:layout_height="wrap_content"
Android:layout_height="match_parent"
Android:background="@color/ColorPrimary"
Android:elevation="2dp"
Android:theme="@style/Base.ThemeOverlay.AppCompat.Dark"
Android:layout_gravity="center" // I add center
xmlns:Android="http://schemas.Android.com/apk/res/Android" />
in main_menu.xml
<menu 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" tools:context=".MainActivity">
<item
Android:id="@+id/action_forward"
Android:title="forward"
Android:icon="@drawable/ic_action_arrow_forward"
app:showAsAction="always"
></item>
<item
Android:id="@+id/action_zoom_in"
Android:title="zoom in"
Android:icon="@drawable/ic_action_zoom_in"
app:showAsAction="always"
></item>
<item ...
und für obigen Code ( main_menu.xml ) in <item>
habe ich alle folgenden Codes ausprobiert:
Android:layout_width="match_parent"
Android:layout_weight=".2" // 20%
Android:gravity="center"
Android:layout_centerVertical="true"
Android:layout_centerHorizontal="true"
Ich weiß wirklich nicht, was ich tun kann, um die Symbole auszurichten. Ich habe Stunden gegoogelt und alles Senario ausprobiert
was ist mein Fehler? für alle Tests kann ich keine Änderung sehen ...
vorher wollte ich pic2 (im obigen Bild) Aber jetzt will ich es einfach zentrieren!
Für alle Tests bekomme ich nur Bild 1. ohne Änderung.
Fix für das Problem, genießen Sie :)
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:elevation="4dp"
Android:background="?attr/colorPrimary">
<!-- Code for your Left Button -->
<ImageView
Android:id="@+id/yourId"
Android:src="@mipmap/yourLeftIcon"
Android:layout_width="wrap_content"
Android:layout_height="fill_parent"
Android:layout_marginLeft="20dp"
Android:layout_marginRight="20dp"
Android:layout_marginTop="4dp"
Android:layout_marginBottom="4dp"
Android:layout_gravity="left" />
<!-- Here is the main code for your Middle Buttons -->
<LinearLayout
Android:layout_width="wrap_content"
Android:layout_height="match_parent"
Android:orientation="horizontal"
Android:layout_gravity="center"
Android:gravity="center">
<Button
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@drawable/ic_launcher"
Android:id="@+id/button1"/>
<Button
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@drawable/ic_launcher"
Android:id="@+id/button2"/>
<Button
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@drawable/ic_launcher"
Android:id="@+id/button3"/>
<Button
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@drawable/ic_launcher"
Android:id="@+id/button4" />
</LinearLayout>
<!-- Code for your Right Button -->
<ImageView
Android:id="@+id/yourId"
Android:src="@mipmap/yourRightIcon"
Android:layout_width="wrap_content"
Android:layout_height="fill_parent"
Android:layout_marginLeft="20dp"
Android:layout_marginRight="20dp"
Android:layout_marginTop="4dp"
Android:layout_marginBottom="4dp"
Android:layout_gravity="right" />
</Android.support.v7.widget.Toolbar>
Die Symbolleiste ist wie jede andere Ansicht. Sie können direkt untergeordnete Elemente hinzufügen und dann wie auf eine normale Ansicht zugreifen.
Dies ist nicht die genaue Antwort auf Ihre Frage, aber es wird Ihnen den Weg zeigen.
<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.Toolbar xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:background="@Android:color/holo_red_light"
Android:elevation="2dp"
Android:theme="@style/Base.ThemeOverlay.AppCompat.Dark">
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<Button
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@drawable/ic_launcher"
Android:id="@+id/button1"/>
<Button
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@drawable/ic_launcher"
Android:id="@+id/button2"/>
<Button
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@drawable/ic_launcher"
Android:id="@+id/button3"/>
<Button
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@drawable/ic_launcher"
Android:id="@+id/button4" />
</LinearLayout>
</Android.support.v7.widget.Toolbar>
Dann können Sie in Ihrem Hauptfragment oder wo auch immer sonst auf so etwas zugreifen.
Toolbar mToolbar = (Toolbar) root.findViewById(R.id.tool_bar);
Button button1 = (Button) mToolbar.findViewById(R.id.button1);
Button button2 = (Button) mToolbar.findViewById(R.id.button2);
Button button3 = (Button) mToolbar.findViewById(R.id.button3);
Button button4 = (Button) mToolbar.findViewById(R.id.button4);
Mit dieser Methode können Sie eine benutzerdefinierte Symbolleiste auf beliebige Weise erstellen. Sie möchten wahrscheinlich ein relatives Layout verwenden.
sie können dies programmgesteuert wie folgt tun:
mToolbar.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
ImageView imageView = (ImageView)mToolbar.findViewById(R.id.logo);
if( mToolbar == null ){
return;
}
int toolbarWidth = mToolbar.getWidth();
int imageWidth = imageView.getWidth();
imageView.setX((toolbarWidth-imageWidth)/2);
}
});
passen Sie Ihre layout_toolbar.xml an:
<Android.support.v7.widget.Toolbar
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/toolbar"
style="@style/Toolbar"
Android:layout_width="match_parent"
Android:layout_height="@dimen/toolbar_height"
Android:background="@drawable/toolbar_background"
Android:focusable="false"
app:titleTextAppearance="@style/AppTheme.Toolbar.Title">
<ImageView
Android:id="@+id/logo"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/toolbar_logo"/>
</Android.support.v7.widget.Toolbar>
Ich weiß, dass diese Lösung schrecklich ist, aber für mich funktioniert sie.
Erstens könnten Sie in LinearLayout 3 Symbolleisten anstelle von 1 platzieren:
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal">
<Android.support.v7.widget.Toolbar Android:id="@+id/bottomToolbarLeft"
Android:layout_width="0dp"
Android:layout_height="?attr/actionBarSize"
Android:layout_weight="1.0"
Android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
<Android.support.v7.widget.Toolbar Android:id="@+id/bottomToolbarCenter"
Android:layout_width="wrap_content"
Android:layout_height="?attr/actionBarSize"
Android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
<Android.support.v7.widget.Toolbar Android:id="@+id/bottomToolbarRight"
Android:layout_width="0dp"
Android:layout_height="?attr/actionBarSize"
Android:layout_weight="1.0"
Android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
</LinearLayout>
Jede Symbolleiste sollte über eine eigene Menüressource verfügen.
Dann erhalten Sie so etwas: Die Symbole sind zentriert, das linke Symbol ist jedoch nicht am linken Rand ausgerichtet
Um das linke Symbol auszurichten, können Sie diesen Parameter einfach für die linke Symbolleiste einstellen:
Android:layoutDirection="rtl"
Das Ergebnis ist: Die gewünschte Reihenfolge
Vielleicht helfen sie:
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<Android.support.design.widget.AppBarLayout
Android:id="@+id/appBar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:theme="@style/AppTheme.AppBarOverlay">
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbarPath"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:background="?attr/colorPrimary">
<ImageView
Android:id="@+id/imgBack"
Android:layout_width="wrap_content"
Android:layout_height="fill_parent"
Android:layout_gravity="left"
Android:layout_marginBottom="4dp"
Android:layout_marginLeft="20dp"
Android:layout_marginRight="20dp"
Android:layout_marginTop="4dp"
Android:src="@drawable/ic_action_back" />
<LinearLayout
Android:layout_width="wrap_content"
Android:layout_height="match_parent"
Android:layout_gravity="center"
Android:gravity="center"
Android:orientation="horizontal">
<ImageView
Android:id="@+id/imgClear"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginRight="15dp"
Android:src="@drawable/ic_action_discard" />
<ImageView
Android:id="@+id/imgStop"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginRight="15dp"
Android:src="@drawable/ic_action_stop" />
<ImageView
Android:id="@+id/imgPath"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginRight="15dp"
Android:src="@drawable/ic_action_merge" />
<ImageView
Android:id="@+id/imgToggle"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/ic_action_map" />
</LinearLayout>
<ImageView
Android:id="@+id/imgForward"
Android:layout_width="wrap_content"
Android:layout_height="fill_parent"
Android:layout_gravity="right"
Android:layout_marginBottom="4dp"
Android:layout_marginLeft="20dp"
Android:layout_marginRight="20dp"
Android:layout_marginTop="4dp"
Android:src="@drawable/ic_action_forward" />
</Android.support.v7.widget.Toolbar>
</Android.support.design.widget.AppBarLayout>
<fragment xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/mapPath"
Android:name="com.google.Android.gms.maps.SupportMapFragment"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_below="@+id/appBar" />
</RelativeLayout>
In Ihrem style.xml
schreiben Sie:
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
Dann in manifest.xml
:
<application
Android:name="com.ir.zanis.app.AppController"
Android:allowBackup="true"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:supportsRtl="true"
Android:theme="@style/AppTheme.NoActionBar"> <===See here===
.......
.............
.............
Sie sollten versuchen, eine Ausrichtung für das Elternlayout anzuwenden.
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:gravity="center">
<Button ...any attributes.../>
...any items...
</LinerLayout>