J'ai posé une question similaire ici ... J'ai eu quelques tutoriels dans les réponses. Mais cette question est différente. car aucune de cette méthode ne fonctionne dans mon projet.
Je veux centrer toutes les icônes dans la barre d'outils
Je teste tous les moyens disponibles ... mais les icônes flottent toujours à gauche.
Je veux des icônes de centrage (je préfère les icônes de gauche, flottantes. Les icônes de gauche, droite, et les autres, centrale).
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>.
Aussi dans 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" />
dans 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 ...
et pour le code ci-dessus (main_menu.xml) dans <item>
j'ai essayé tous ces codes:
Android:layout_width="match_parent"
Android:layout_weight=".2" // 20%
Android:gravity="center"
Android:layout_centerVertical="true"
Android:layout_centerHorizontal="true"
Je ne sais vraiment pas ce que je peux faire pour aligner les icônes . J'ai googlé des heures et j'ai tout essayé
quel est mon tort? pour tous les tests je ne peux voir aucun changement ...
avant je voulais pic2 (dans l'image ci-dessus) Mais maintenant je veux juste le centrer!
Pour tout mon test je ne reçois que la photo 1. sans aucun changement.
Corrigez le problème, profitez-en :)
<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>
La barre d'outils est comme n'importe quelle autre vue. Vous pouvez y ajouter directement des enfants et y accéder ensuite comme vous le feriez pour une vue normale.
Ce n’est pas la réponse exacte à votre question, mais elle vous indiquera la voie à suivre.
<?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>
Ensuite, dans votre fragment principal ou ailleurs, vous pouvez accéder à quelque chose comme ceci.
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);
Vous pouvez utiliser cette méthode pour créer une barre d'outils personnalisée comme bon vous semble. Vous voudrez probablement utiliser une mise en page relative.
vous pouvez le faire par programme comme suit:
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);
}
});
personnalisez votre layout_toolbar.xml:
<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>
Je sais que cette solution est terrible, mais pour moi cela fonctionne.
Tout d'abord, dans LinearLayout, vous pouvez placer 3 barres d'outils au lieu de 1:
<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>
Chaque barre d’outils doit avoir sa propre ressource de menu.
Ensuite, vous obtiendrez quelque chose comme ça: Les icônes sont centrées, mais l’icône de gauche n’est pas alignée sur la bordure de gauche }
Enfin, pour aligner l’icône de gauche, vous pouvez simplement définir ce paramètre pour la barre d’outils de gauche:
Android:layoutDirection="rtl"
Le résultat est: L'ordre souhaité
Peut-être vous aider:
<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>
Dans votre style.xml
, écrivez:
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
Puis dans 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===
.......
.............
.............
Vous devriez essayer d'appliquer n'importe quel alignement pour la disposition des parents.
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:gravity="center">
<Button ...any attributes.../>
...any items...
</LinerLayout>