Android: Cómo centrar el título en ToolBar

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

Gracias de antemano.

Recuerde que Toolbar es solo un ViewGroup como los otros. Entonces puedes rellenar View s en él. En tu caso, necesitas un TextView dentro de una Toolbar .

    

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

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

El problema de simplemente agregar una Vista de texto en el centro alineado de la Barra de herramientas es agregar elementos de menú en la barra de herramientas que compensarán el texto centrado.

Para evitar esto, he colocado capas de texto sobre la barra de herramientas, no dentro de ella. De esta forma, no importa cuántos icons agregue, no compensará el texto centrado:

        

De esta forma, no hay necesidad de ninguna lógica adicional para compensar el espacio de desplazamiento de los botones de retroceso / los icons de menú / búsqueda de desbordamiento, 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, usar

app_bar.xml

     

activity_sign_up

     

Avtivity

 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); } } 

Puede forzar la barra de herramientas al centro al envolver el título y nivelar el relleno a la derecha que tiene relleno izquierdo predeterminado para el título. A continuación, coloque el color de fondo en el elemento primario de la barra de herramientas y, de ese modo, la parte que se recorta al envolver el título tiene el mismo color (blanco en mi ejemplo):

    

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 vista de texto como width = wrap_content y layout_gravity = center

  

Simplemente colocar otra TextView Toolbar dentro de TextView no es suficiente para obtener el título centrado en relación con la pantalla, su posición dependerá de otros elementos en una barra de herramientas (botón Atrás, elementos de menú).

Para hacer que el título esté centrado, puede establecer su posición manualmente:

Extienda la clase android.support.v7.widget.Toolbar y realice los siguientes cambios:

  1. agregar TextView
  2. anular onLayout() y establecer la ubicación de TextView para centrarlo ( titleView.setX((getWidth() - titleView.getWidth())/2) )
  3. anula setTitle() donde establece el texto del título en la nueva vista de texto
     clase pública CenteredToolbar extends Toolbar {

         private TextView titleView;

         público CenteredToolbar (Contexto contextual) {
             esto (contexto, nulo);
         }

         Public CenteredToolbar (Context context, @Nullable AttributeSet attrs) {
             esto (context, attrs, android.support.v7.appcompat.R.attr.toolbarStyle);
         }

         Public CenteredToolbar (Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
             super (context, attrs, defStyleAttr);

             titleView = new TextView (getContext ());

             int textAppearanceStyleResId;
             TypedArray a = context.getTheme (). ObtainStyledAttributes (attrs,
                     new 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, new LayoutParams (LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
         }

         @Anular
         void protegido en Layout (boolean changed, int l, int t, int r, int b) {
             super.onLayout (modificado, l, t, r, b);
             titleView.setX ((getWidth () - titleView.getWidth ()) / 2);
         }

         @Anular 
          public void setTitle (título de CharSequence) { 
              titleView.setText (título); 
          }
     }

En el diseño puedes usar esta clase de esta manera:

  

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

La interfaz de usuario final se ve así: enter image description here Para mi proyecto, tengo un ícono 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:

     

Mi barra de herramientas extiende android.support.v7.widget.Toolbar, luego (tipo de código duro) mide el tamaño de RelativeLayout, finalmente lo distribuye en el centro horizontal.

 /** * Customized the RelativeLayout inside the Toolbar. * Because by default the custom view in the Toolbar cannot set * width as our expect value. So this class allows setting the width of the * RelativeLayout 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); } } 

Adjunte el diseño de la barra de herramientas. Tal vez no lo necesites, solo estoy pegando aquí para la referencia de alguien:

   

Consulte 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); } } 

Use un título personalizado (con centro de gravedad) dentro de la barra de herramientas

     

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

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

      

No te entendí Pregunta completamente … pero encontré una solución como esta

Para utilizar un título personalizado en la barra de herramientas, todo lo que debe hacer es recordar que la barra de herramientas es solo un elegante grupo de vistas, por lo que puede agregar un título personalizado como este:

    

Esto significa que puede aplicar estilo a la vista de texto de la forma que desee porque es solo una vista de texto normal. Entonces, 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); 

establecer collapsedTitleGravity en el centro

      

Creo que esto funcionará

 name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar" 

cambie su tema base en values ​​/ styles.xml

Luego agrega tu barra de herramientas manualmente como esta

  

Pero esta no es una buena idea, esto no funciona bien.

puedes insertar este código en tu código

 SupportActionBar.Title = "title";