Android: Cómo centrar el título en la barra de herramientas

Estoy usando la barra de herramientas en mi proyecto por primera vez, así que no sé cómo personalizar la barra de herramientas en android. Necesito centrar el título en la barra de herramientas y cómo hacerlo, por favor dígame.

Gracias de antemano.

Recuerde que la Toolbar es sólo un ViewGroup como los demás. Por lo tanto, puedes incluir View s en ella. En su caso, necesita un TextView dentro de una Toolbar .

 <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_height="wrap_content" android:layout_width="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="Some Fancy Title" android:gravity = "center" android:id="@+id/toolbar_title" /> </android.support.v7.widget.Toolbar> 

Ahora, establezca la Toolbar como su barra de acción recuperándola primero y usando el setSupportActionBar() .

Dado que la gravedad del TextView se establece en el center , el texto debe estar centrado.

El problema de simplemente añadir un TextView en el centro alineado de la barra de herramientas está agregando elementos de menú en la barra de herramientas que compensarán el texto centrado.

Para evitar esto, he superpuesto el texto en la parte superior de la barra de herramientas, no dentro de ella. De esta manera no importa cuántos iconos agregue, no compensará el texto centrado:

 <android.support.design.widget.AppBarLayout android:id="@+id/appbar_layout" android:layout_width="match_parent" android:layout_height="wrap_content"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.ActionBar"> </android.support.v7.widget.Toolbar> <TextView android:layout_centerInParent="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/app_name"/> </RelativeLayout> </android.support.design.widget.AppBarLayout> 

De esta manera no hay necesidad de ninguna lógica adicional para compensar la separación de los botones de retroceso / menú de desbordamiento / iconos de búsqueda, etc. en la barra de herramientas, porque el texto centrado está encima de él, no en él.

ToolBar es un grupo de vista. Para Centrar Alinear el texto Utilizar

App_bar.xml

 <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res/in.chabu" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" app:theme="@style/ToolBarTheme" android:minHeight="?attr/actionBarSize"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/title_activity_sign_up" android:layout_gravity="center" android:id="@+id/toolbar_title" android:textStyle="bold" android:textColor="@android:color/white"/> </android.support.v7.widget.Toolbar> 

Activity_sign_up

 <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" tools:context="in.chabu.activities.SignUpActivity" > <include android:id="@+id/tool_bar" layout="@layout/app_bar"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/tool_bar" android:text="@string/hello_world" /> </RelativeLayout> 

Avidez

 public class SignUpActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sign_up); Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayShowTitleEnabled(false); } } 

Cuando tiene el botón Inicio o Arriba junto con el título centrado y el título ya no está centrado y se mueve un poco hacia la derecha un poco, configure su texto como width = wrap_content y layout_gravity = center

 <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center"/> 

Apenas poner otro TextView dentro de la Toolbar no es bastante para conseguir título centrado con respecto a la pantalla, su posición dependerá de otros artículos en una barra de herramientas (botón trasero, artículos del menú).

Para que el título se centre, puede establecer manualmente su posición:

Amplíe la clase android.support.v7.widget.Toolbar y realice los siguientes cambios:

  1. Agregar TextView
  2. onLayout() y establece la ubicación TextView para centrarla ( titleView.setX((getWidth() - titleView.getWidth())/2) )
  3. setTitle() donde se establece el texto del título en la nueva vista de texto
     Public class CenterToolbar extends Barra de herramientas {

         Privado TextView titleView;

         Public CenteredToolbar (Contexto contextual) {
             Esto (contexto, nulo);
         }

         Public CenteredToolbar (Contexto contextual, @Nullable AttributeSet attrs) {
             Esto (contexto, attrs, android.support.v7.appcompat.R.attr.toolbarStyle);
         }

         Public CenteredToolbar (Contexto contextual, @Nullable AttributeSet attrs, int defStyleAttr) {
             Super (contexto, attrs, defStyleAttr);

             TitleView = new TextView (getContext ());

             Int textAppearanceStyleResId;
             TypedArray a = context.getTheme (). ObtenerStyledAttributes (attrs,
                     Nuevo int [] {android.support.v7.appcompat.R.attr.titleTextAppearance}, defStyleAttr, 0);
             tratar {
                 TextAppearanceStyleResId = a.getResourceId (0, 0);
             } finalmente {
                 A.recycle ();
             }
             If (textAppearanceStyleResId> 0) {
                 TitleView.setTextAppearance (context, textAppearanceStyleResId);
             }

             AddView (titleView, nuevo LayoutParams (LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
         }

         @Anular
         Protected void onLayout (booleano cambiado, int l, int t, int r, int b) {
             Super.onLayout (cambiado, l, t, r, b);
             TitleView.setX ((getWidth () - titleView.getWidth ()) / 2);
         }

         @Anular 
          Public void setTitle (título CharSequence) { 
              TitleView.setText (título); 
          }
     }

En el diseño puede utilizar esta clase como esta:

 <com.example.CenteredToolbar xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" android:elevation="4dp" android:theme="@style/ToolbarTheme"/> 

Además, para que el nuevo texto del título se parezca al título estándar, debe aplicar el estilo titleTextAppearance al nuevo TextView ( titleView.setTextAppearance(context, textAppearanceStyleResId) ).

Puede forzar la barra de herramientas al centro mediante el ajuste del título y el nivel de relleno derecho que tiene el relleno izquierdo por defecto para el título. A continuación, coloque el color de fondo en el padre de la barra de herramientas y esa parte de la manera que se corta por el título de envoltura está en el mismo color (blanco en mi ejemplo):

 <android.support.design.widget.AppBarLayout android:id="@+id/appbar_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/white"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="wrap_content" android:layout_height="56dp" android:layout_gravity="center_horizontal" android:paddingEnd="15dp" android:paddingRight="15dp" android:theme="@style/ThemeOverlay.AppCompat.ActionBar" app:titleTextColor="@color/black"/> </android.support.design.widget.AppBarLayout> 

Compruebe la respuesta completa aquí: https://stackoverflow.com/a/35723158/445548

  public void centerTitleAndSubtitle(Toolbar toolbar){ // Save current title and subtitle final CharSequence originalTitle = toolbar.getTitle(); final CharSequence originalSubtitle = toolbar.getSubtitle(); // Temporarily modify title and subtitle to help detecting each toolbar.setTitle("title"); toolbar.setSubtitle("subtitle"); for(int i = 0; i < toolbar.getChildCount(); i++){ View view = toolbar.getChildAt(i); if(view instanceof TextView){ TextView textView = (TextView) view; if(textView.getText().equals("title")){ // Customize title's TextView Toolbar.LayoutParams params = new Toolbar.LayoutParams(Toolbar.LayoutParams.WRAP_CONTENT, Toolbar.LayoutParams.MATCH_PARENT); params.gravity = Gravity.CENTER_HORIZONTAL; textView.setLayoutParams(params); } else if(textView.getText().equals("subtitle")){ // Customize subtitle's TextView Toolbar.LayoutParams params = new Toolbar.LayoutParams(Toolbar.LayoutParams.WRAP_CONTENT, Toolbar.LayoutParams.MATCH_PARENT); params.gravity = Gravity.CENTER_HORIZONTAL; textView.setLayoutParams(params); } } // Restore title and subtitle toolbar.setTitle(originalTitle); toolbar.setSubtitle(originalSubtitle); } } 

La interfaz de usuario final se ve así: Introduzca aquí la descripción de la imagen Para mi proyecto, tengo icono de navegación a la izquierda y menús (más de 1) a la derecha, y quiero poner el título en el centro.

Tengo setSupportActionBar(toolbar) , y _actionBar.setCustomView(R.layout.actionbar_filter); . Mi archivo de diseño:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/lib_action_bar_filter_view_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/selectableItemBackgroundBorderless" android:gravity="center"> <TextView android:id="@id/lib_action_bar_filter_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:gravity="center" android:maxLines="2" android:paddingLeft="5dp" android:paddingRight="5dp" android:textColor="@android:color/white" android:textSize="15sp"/> </RelativeLayout> 

Mi barra de herramientas extiende android.support.v7.widget.Toolbar, entonces (tipo de código duro) medir el tamaño de la RelativeLayout, finalmente el diseño en horizental centro.

 /** * Customized the <code>RelativeLayout</code> inside the <code>Toolbar</code>. * Because by default the custom view in the <code>Toolbar</code> cannot set * width as our expect value. So this class allows setting the width of the * <code>RelativeLayout</code> to take up any percentage of the screen width. */ public class CenteredToolbar extends Toolbar { private static final double WIDTH_PERCENTAGE = 0.8; private TextView titleView; public CenteredToolbar(Context context) { this(context, null); } public CenteredToolbar(Context context, @Nullable AttributeSet attrs) { this(context, attrs, android.support.v7.appcompat.R.attr.toolbarStyle); } public CenteredToolbar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int childCount = getChildCount(); for (int i = 0; i < childCount; i++) { View view = this.getChildAt(i); if (view instanceof RelativeLayout) { int width = getMeasuredWidth(); ViewGroup.LayoutParams layoutParams = view.getLayoutParams(); layoutParams.width = (int) (width * WIDTH_PERCENTAGE); view.setLayoutParams(layoutParams); break; } } } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); int childCount = getChildCount(); for (int i = 0; i < childCount; i++) { View view = this.getChildAt(i); if (view instanceof RelativeLayout) { forceTitleCenter(view); break; } } } /** * Centering the layout. * * @param view The view to be centered */ private void forceTitleCenter(View view) { int toolbarWidth = getMeasuredWidth(); int relativeLayoutWidth = view.getMeasuredWidth(); int newLeft = (int) (toolbarWidth - relativeLayoutWidth) / 2; int top = view.getTop(); int newRight = newLeft + relativeLayoutWidth; int bottom = view.getBottom(); view.layout(newLeft, top, newRight, bottom); } } 

Adjuntar el diseño de mi barra de herramientas. Tal vez usted no necesita esto, sólo estoy pegando aquí para la referencia de alguien:

 <?xml version="1.0" encoding="utf-8"?> <com.chinalwb.CenteredToolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/vmosolib_toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" android:elevation="4dp" app:contentInsetEnd="0dp" /> 

No te entendí Pregunta Completamente … pero encontré Solución Como esta

Para usar un título personalizado en tu barra de herramientas, todo lo que necesitas hacer es recordar que la barra de herramientas es sólo un lujoso ViewGroup, por lo que puedes añadir un título personalizado como:

 <android.support.v7.widget.Toolbar android:id="@+id/toolbar_top" android:layout_height="wrap_content" android:layout_width="match_parent" android:minHeight="?attr/actionBarSize" android:background="@color/action_bar_bkgnd" app:theme="@style/ToolBarTheme" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Toolbar Title" android:layout_gravity="center" android:id="@+id/toolbar_title" /> </android.support.v7.widget.Toolbar> 

Esto significa que puede diseñar el TextView como quiera, ya que es sólo un TextView regular. Así que en tu actividad puedes acceder al título de la siguiente manera:

 Toolbar toolbarTop = (Toolbar) findViewById(R.id.toolbar_top); TextView mTitle = (TextView) toolbarTop.findViewById(R.id.toolbar_title); 

Puede insertar este código en su código

 SupportActionBar.Title = "title"; 

Utilice el título personalizado (con centro de gravedad) dentro de la barra de herramientas

  <android.support.v7.widget.Toolbar android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:animateLayoutChanges="true" android:backgroundTint="@color/colorPrimary" android:background="?attr/colorPrimary" android:elevation="4dp" android:minHeight="?android:attr/actionBarSize" app:layout_collapseMode="pin" app:layout_scrollFlags="scroll|exitUntilCollapsed" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/AppTheme.PopupOverlay" app:titleTextAppearance="@style/Toolbar.TitleText" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/toolbar_title" android:text="Title" android:layout_gravity="center"/> </android.support.v7.widget.Toolbar> 

En cuanto a barra de herramientas es un grupo de vista para que pueda crear diseños dentro de él. Sigue estos pasos

1-Crea una vista de texto dentro de tu barra de herramientas 2-haz que tu centro de gravedad textview

  <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" > <de.hdodenhof.circleimageview.CircleImageView xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/profile_image" android:layout_width="44dp" android:layout_height="55dp" android:src="@drawable/profile" app:civ_border_color="@color/secondary_text" app:civ_border_width="2dp" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Title" android:gravity="center" style="@style/Base.TextAppearance.AppCompat.Widget.ActionBar.Title" /> </android.support.v7.widget.Toolbar> 
  • Eliminar espacio entre los botones de LinearLayout (Android)
  • Cómo configurar el texto de la barra de herramientas y el color de la flecha hacia atrás
  • Obtener el icono de navegación de la barra de herramientas
  • ¿Barra de herramientas Android para API 19? (Para la API 21 funciona bien)
  • Ocultar el título de la aplicación en support.v7.widget.toolbar
  • Cómo restaurar Colapsing Toolbar Layout Estado tras cambio de orientación de pantalla
  • Cómo quitar divisor entre Toolbar y RelativeLayout
  • ¿Por qué se corta la altura de la barra de herramientas de Android?
  • Barra de herramientas - agregue el botón arriba
  • Barra de herramientas Android desaparece durante el desplazamiento con Coordinatorlayout
  • CollapsingToolbarLayout establece el título sólo cuando se colapsa
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.