web-dev-qa-db-fra.com

Ajouter une vue personnalisée à droite de la barre d'outils

J'essaie d'y parvenir (une minuterie dans toolbar avec un fond rouge):

A timer in the toolbar along with red background

J'essaie d'ajouter customView dans toolbar. Il finit toujours par être à l'extrême gauche juste à côté de la flèche arrière. Comme le texte YP dans l'image ci-dessous est un Textview personnalisé ajouté à la barre d'outils . enter image description here .

Le code pour toolbar:

<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.Toolbar
    Android:id="@+id/base_activity_toolbar"
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:background="?attr/colorPrimary"
    Android:elevation="4dp"
    Android:minHeight="?attr/actionBarSize"
    Android:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />

Le code pour ajouter la mise en page:

    LayoutInflater mInflater= LayoutInflater.from(context);
    View mCustomView = mInflater.inflate(R.layout.textview, null);
    toolbar.addView(mCustomView);

Voici la disposition que j'ajoute en ce moment pour les tests:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
              Android:orientation="horizontal"
              Android:layout_width="wrap_content"
              Android:gravity="end"
              Android:layout_height="wrap_content">
    <TextView Android:layout_width="wrap_content"
              Android:text="yp"
              Android:layout_height="wrap_content"/>
</LinearLayout>

Je manque quelque chose de façon majeure, ne pouvait pas comprendre. Tirer mes cheveux.

20
Shubham

Vous pouvez ajouter ViewGroups à l'intérieur Toolbar

          <Android.support.v7.widget.Toolbar
            Android:id="@+id/toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="@dimen/toolbar_height"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

            <RelativeLayout
             ....
            </RelativeLayout>

           </Android.support.v7.widget.Toolbar>
19
Anoop M

Je viens de définir layout_gravity sur rightet cela a fonctionné

  <Android.support.v7.widget.Toolbar
    Android:id="@+id/toolbar"
    Android:layout_width="0dp"
    Android:layout_height="?android:actionBarSize"
    app:title="NEW REQUESTS"
  >
    <TextView
      Android:layout_width="wrap_content"
      Android:layout_height="wrap_content"
      Android:text="blahblah"
      Android:layout_gravity="right"  
      />
  </Android.support.v7.widget.Toolbar>
19
charlag

Les réponses données fonctionnent mais si vous souhaitez définir un titre dans la barre d'outils (très probablement), l'ajout d'un RelativeLayout repousse le titre hors de la vue vers la droite. Dans ce cas, vous devez désactiver le titre de la barre d'outils en définissant getSupportActionBar().setDisplayShowTitleEnabled(false) et ajouter une TextView personnalisée à côté de l'autre vue que vous souhaitez ajouter à la barre d'outils. Ainsi, par exemple, vous ajouteriez un ImageView de cette façon:

<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.Toolbar
    Android:id="@+id/base_activity_toolbar"
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:background="?attr/colorPrimary"
    Android:elevation="4dp"
    Android:minHeight="?attr/actionBarSize"
    Android:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>

    <RelativeLayout
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent">

        <TextView
            Android:id="@+id/custom_toolbar_title"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_centerVertical="true"
            style="@style/ActionBarTitle"/>

        <ImageView
            Android:layout_width="20dp"
            Android:layout_height="20dp"
            Android:scaleType="centerCrop"
            Android:adjustViewBounds="true"
            Android:layout_centerVertical="true"
            Android:layout_toRightOf="@id/custom_toolbar_title"
            Android:src="@drawable/arrow"/>

    </RelativeLayout>

</Android.support.v7.widget.Toolbar>
8
Ali Kazi

Je viens d'avoir le même problème mais j'ai trouvé une solution plus simple (à mon humble avis).

Vous pouvez légèrement changer votre code depuis:

LayoutInflater mInflater= LayoutInflater.from(context);
View mCustomView = mInflater.inflate(R.layout.textview, null);
toolbar.addView(mCustomView);

À :

LayoutInflater mInflater= LayoutInflater.from(context);
View mCustomView = mInflater.inflate(R.layout.textview, null);
toolbar.addView(mCustomView, new Toolbar.LayoutParams(Gravity.RIGHT));

La vue est ensuite ajoutée avec la gravité réglée à droite!

8
Sylfo

essaie. remplacer R.layout.textview par

 <RelativeLayout Android:layout_height="match_parent"
                Android:layout_width="match_parent"
                >

                <TextView
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content"
                    Android:text="TV"
                    Android:id="@+id/textView2"
                    Android:layout_centerVertical="true"
                    Android:layout_alignParentRight="true"
                    Android:layout_alignParentEnd="true" />
            </RelativeLayout>
0
Akash kv