texto studio settitle font custom centrar android android-actionbar alignment center title

android - studio - Cómo alinear el título en el centro de ActionBar en el tema predeterminado(Theme.Holo.Light)



custom toolbar android (11)

Busqué mucho pero no puedo encontrar la manera. ¿Cómo puedo establecer el título en el centro de ActionBar en lugar de alineado a la izquierda? Usé el código siguiente para establecer el título en el centro:

ViewGroup decorView= (ViewGroup) this.getWindow().getDecorView(); LinearLayout root= (LinearLayout) decorView.getChildAt(0); FrameLayout titleContainer= (FrameLayout) root.getChildAt(0); TextView title= (TextView) titleContainer.getChildAt(0); title.setGravity(Gravity.CENTER);

Pero da error como a continuación:

ClassCastException : com.android.internal.widget.ActionBarView can not be cast to android.widget.TextView.

Cualquier otra solución ... Cualquier ayuda será apreciada.


Código Java: escriba esto en onCreate ()
getSupportActionBar().setDisplayShowCustomEnabled(true); getSupportActionBar().setCustomView(R.layout.action_bar);

y para su vista personalizada, simplemente use FrameLayout, east peasy!
android.support.v7.widget.Toolbar es otra opción

<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="left|center_vertical" android:textAppearance="?android:attr/textAppearanceLarge" android:text="@string/app_name" android:textColor="@color/black" android:id="@+id/textView" /> </FrameLayout>


Creo que al posicionar las vistas en la barra de acciones alcanzará lo que desee. En el diseño de la barra de acciones cuando los parámetros de diseño se establecen para que coincidan con los padres, no coincide con el ancho completo, por eso lo hice programáticamente donde tengo éxito.Por ancho de configuración (funciona como layout_weight = "valor") podemos establecer nuestra vista donde queramos:

actionBar = getSupportActionBar(); actionBar.setDisplayShowCustomEnabled(true); LayoutInflater ll = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); LinearLayout linearLayout = (LinearLayout) ll.inflate(R.layout.custom_actionbar, null); //inner layout within above linear layout LinearLayout inner = (LinearLayout) linearLayout.findViewById(R.id.inner_linear_ractionbar); inner.setMinimumWidth(getWidth() * 2 / 10); // we will set our textview to center and display there some text TextView t = (TextView) linearLayout.findViewById(R.id.center_text); t.setWidth(getWidth() * 6 / 10); Button b = (Button) linearLayout.findViewById(R.id.edit_button); b.setWidth(getWidth() *3/ 20); ImageButton imageButton = (ImageButton) linearLayout.findViewById(R.id.action_bar_delete_item); imageButton.setMinimumWidth(deviceUtils.getWidth() / 20);

y aquí está el método getWidth ():

public int getWidth() { DisplayMetrics dm = new DisplayMetrics(); mActivity.getWindowManager().getDefaultDisplay().getMetrics(dm); return dm.widthPixels; }


Echa un vistazo a la nueva barra de herramientas en la clase de biblioteca de soporte en la actualización de Lollipop. Puedes diseñar una barra de acciones agregando una barra de herramientas en tu diseño.

agregue estos elementos en el tema de su aplicación

<item name="android:windowNoTitle">true</item> <item name="windowActionBar">false</item>

Crea tu barra de herramientas en un diseño e incluye tu vista de texto en el diseño del centro de tu barra de herramientas

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/acbarcolor"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/toolbar_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="@string/app_name" android:textColor="#ffffff" android:textStyle="bold" /> </RelativeLayout> </android.support.v7.widget.Toolbar>

agrega tu barra de acciones como barra de herramientas

toolbar = (Toolbar) findViewById(R.id.toolbar); if (toolbar != null) { setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); }

asegúrese de que necesita incluir la barra de herramientas en su archivo de recursos como este

<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:orientation="vertical" android:layout_height="match_parent" android:layout_width="match_parent" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <include android:layout_width="match_parent" android:layout_height="wrap_content" layout="@layout/toolbar" /> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- Framelayout to display Fragments --> <FrameLayout android:id="@+id/frame_container" android:layout_width="match_parent" android:layout_height="match_parent"> <include android:layout_width="match_parent" android:layout_height="match_parent" layout="@layout/homepageinc" /> </FrameLayout> <fragment android:id="@+id/fragment1" android:layout_gravity="start" android:name="com.shouldeye.homepages.HomeFragment" android:layout_width="250dp" android:layout_height="match_parent" /> </android.support.v4.widget.DrawerLayout> </LinearLayout>


Esto realmente funciona:

getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); getActionBar().setCustomView(R.layout.custom_actionbar); ActionBar.LayoutParams p = new ActionBar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); p.gravity = Gravity.CENTER;

Debe definir el diseño custom_actionbar.xml, que es según su requisito, por ejemplo:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="50dp" android:background="#2e2e2e" android:orientation="vertical" android:gravity="center" android:layout_gravity="center"> <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/top_banner" android:layout_gravity="center" /> </LinearLayout>


Parece que no hay forma de hacer esto sin una vista personalizada. Puede obtener la vista de título:

View decor = getWindow().getDecorView(); TextView title = (TextView) decor.findViewById(getResources().getIdentifier("action_bar_title", "id", "android"));

Pero el cambio de gravity o la layout_gravity no tiene ningún efecto. El problema en ActionBarView , que distribuye sus elementos ActionBarView por sí mismo, por lo que cambiar los parámetros de diseño de sus elementos secundarios tampoco tiene ningún efecto. Para ver este excelente código siguiente:

ViewGroup actionBar = (ViewGroup) decor.findViewById(getResources().getIdentifier("action_bar", "id", "android")); View v = actionBar.getChildAt(0); ActionBar.LayoutParams p = new ActionBar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); p.gravity= Gravity.CENTER; v.setLayoutParams(p); v.setBackgroundColor(Color.BLACK);


Puede crear un diseño personalizado y aplicarlo a la barra de acciones.

Para hacerlo, sigue esos 2 sencillos pasos:

  1. Código Java

    getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); getSupportActionBar().setCustomView(R.layout.actionbar);

Donde R.layout.actionbar es el siguiente diseño.

  1. XML

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:id="@+id/action_bar_title" android:text="YOUR ACTIVITY TITLE" android:textColor="#ffffff" android:textSize="24sp" /> </LinearLayout>

Puede ser tan complejo como quieras. ¡Pruébalo!

EDITAR:

Para establecer el background puede usar la propiedad android:background en el diseño del contenedor (LinearLayout en ese caso). Es posible que deba establecer la altura de diseño android:layout_height para match_parent lugar de wrap_content .

Además, también puede agregarle un LOGO / ICONO . Para hacerlo, simplemente agregue un ImageView dentro de su diseño, y configure la propiedad de orientación de diseño android:orientation en horizontal (o simplemente use un RelativeLayout y administrelo usted mismo).

Para cambiar dinámicamente el título de la barra de acción personalizada anterior, haga lo siguiente:

TextView title=(TextView)findViewById(getResources().getIdentifier("action_bar_title", "id", getPackageName())); title.setText("Your Text Here");


Puede forzar la barra de herramientas al envolver el título y nivelar el relleno a la derecha que tiene relleno izquierdo predeterminado para el título. Luego coloque el color de fondo en el elemento primario de la barra de herramientas y de esa manera la parte que se recorta al envolver el título tiene 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>


Sé que mi respuesta no es a tiempo, pero esto es puramente código no xml requerido.
Esto es para usar en Activity

public void setTitle(String title){ getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true); TextView textView = new TextView(this); textView.setText(title); textView.setTextSize(20); textView.setTypeface(null, Typeface.BOLD); textView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); textView.setGravity(Gravity.CENTER); textView.setTextColor(getResources().getColor(R.color.white)); getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); getSupportActionBar().setCustomView(textView); }


Esto es para usar en Fragment

public void setTitle(String title){ ((AppCompatActivity)getActivity()).getSupportActionBar().setHomeButtonEnabled(true); ((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true); TextView textView = new TextView(getActivity()); textView.setText(title); textView.setTextSize(20); textView.setTypeface(null, Typeface.BOLD); textView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); textView.setGravity(Gravity.CENTER); textView.setTextColor(getResources().getColor(R.color.white)); ((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); ((AppCompatActivity)getActivity()).getSupportActionBar().setCustomView(textView); }


Tuve el mismo problema, y ​​debido a que el botón "Inicio" se agregó automáticamente en la barra de herramientas, mi texto no se ingresó exactamente.

Lo arreglé de una manera sucia, pero funciona bien en mi caso. Simplemente agregué un margen a la derecha de mi TextView para compensar el botón de inicio de la izquierda. Aquí está mi diseño de la barra de herramientas:

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:elevation="1dp" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_collapseMode="pin" android:gravity="center" android:background="@color/mainBackgroundColor" android:fitsSystemWindows="true" > <com.lunabee.common.utils.LunabeeShadowTextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginRight="?attr/actionBarSize" android:gravity="center" style="@style/navigation.toolbar.title" /> </android.support.v7.widget.Toolbar>


la solución se basa en estas cosas:

  • necesita usar su propia clase que extiende la barra de herramientas (support.v7.widget.toolbar)
  • debe sobrescribir un método Barra de herramientas # addView

Qué hace:

cuando la barra de herramientas de la primera vez ejecuta #setTitle, crea AppCompatTextView y lo usa para mostrar el texto del título.

cuando se crea AppCompatTextView, la barra de herramientas (como ViewGroup), la agrega a su propia jerarquía con el método #addView.

Además, al tratar de encontrar la solución noté que la vista de texto tiene el ancho de diseño establecido en "wrap_content", así que decidí hacer que "match_parent" y asignar la alineación de texto a "center".

MyToolbar.kt, omitiendo cosas no relacionadas (constructores / importaciones):

class MyToolbar : Toolbar { override fun addView(child: View, params: ViewGroup.LayoutParams) { if (child is TextView) { params.width = ViewGroup.LayoutParams.MATCH_PARENT child.textAlignment= View.TEXT_ALIGNMENT_CENTER } super.addView(child, params) } }

posibles "efectos secundarios": esto también se aplicará a "subtítulos"


si está utilizando la barra de herramientas, simplemente agregue

android:layout_gravity="center_horizontal"

Debajo de la barra de herramientas Al igual que este fragmento

<android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="@color/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay"> <TextView android:id="@+id/tvTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" //Important android:textColor="@color/whitecolor" android:textSize="20sp" android:textStyle="bold" /> </android.support.v7.widget.Toolbar> </android.support.design.widget.AppBarLayout>