studio setsupportactionbar getsupportactionbar full example bar android toolbar android-support-library

setsupportactionbar - toolbar android example



En la aplicación de Android, el método Toolbar.setTitle no tiene ningún efecto: el nombre de la aplicación se muestra como título (23)

Estoy tratando de crear una aplicación simple usando la biblioteca android-support-v7: 21.

Fragmentos de código:
MainActivity.java

public class MainActivity extends ActionBarActivity { Toolbar mActionBarToolbar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar); mActionBarToolbar.setTitle("My title"); setSupportActionBar(mActionBarToolbar); }

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:fitsSystemWindows="true" android:orientation="vertical"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar_actionbar" android:background="@null" android:layout_width="match_parent" android:layout_height="?actionBarSize" android:fitsSystemWindows="true" /> </LinearLayout>

Pero en lugar de "Mi título" en la barra de herramientas%, se muestra el nombre de la aplicación.
Parece que el método setTitle no tiene efecto.
Me gustaría mostrar "Mi título".

UPD: Antes, styles.xml era:

<style name="AppTheme" parent="Theme.AppCompat"> <item name="windowActionBar">false</item> </style>

Por lo tanto, pensé que la barra de acción no se utiliza. Añado NoActionBar al estilo padre:

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar"> <item name="windowActionBar">false</item> </style>

Pero el problema no está resuelto.

Se agradece mucho cualquier ayuda.


Asegúrate de agregar esta opción:

getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE);


Aunque no fue inmediatamente relevante para esta configuración en particular, encontré que eliminar "CollapsingToolbarLayout" de mi XML que estaba envolviendo mi barra de herramientas dentro de un AppBarLayout hizo que todo funcionara.

Así que esto:

<android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_height="?attr/actionBarSize" app:layout_scrollFlags="scroll|enterAlways" app:navigationIcon="@drawable/ic_arrow_back_white_24dp" /> </android.support.design.widget.AppBarLayout>

En lugar de esto:

<android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.design.widget.CollapsingToolbarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/collapsingToolbar" android:minHeight="?attr/actionBarSize" app:layout_scrollFlags="enterAlways|scroll|snap"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_height="?attr/actionBarSize" app:navigationIcon="@drawable/ic_arrow_back_white_24dp" /> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout>

Luego, establezco el título en el onCreate de la actividad, antes de llamar a setSupportActionBar ().



Encontró la solución:

En lugar de:

mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar); mActionBarToolbar.setTitle("My title"); setSupportActionBar(mActionBarToolbar);

Solía:

mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar); setSupportActionBar(mActionBarToolbar); getSupportActionBar().setTitle("My title");

Y funciona.


Esto está sucediendo porque estás usando Toolbar y ActionBar ambos. Ahora que desea utilizar la barra de herramientas como una barra de acción, lo primero que debe hacer es desactivar la barra de acción provista por la decoración.

La forma más fácil es hacer que su tema se extienda desde Theme.AppCompat.NoActionBar .


Esto se puede hacer configurando el atributo android:label de su actividad en el archivo AndroidManifest.xml :

<activity android:name="my activity" android:label="The Title I''d like to display" />

Y luego agregue esta línea al onCreate ():

getSupportActionBar().setDisplayShowTitleEnabled(true);


Intenté renombrar la barra de herramientas del fragmento.

Me ayudó, espero ayudar a alguien más.

Activity activity = this.getActivity(); Toolbar toolbar = (Toolbar) activity.findViewById(R.id.detail_toolbar); if (toolbar != null) { activity.setTitle("Title"); } //toolbar.setTitle("Title"); did not give the same results

Captura de pantalla:


Intenta esto ... este método funciona para mí .. !! Espero que pueda ayudar a alguien .. !!

<android.support.v7.widget.Toolbar xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/my_awesome_toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" android:minHeight="?attr/actionBarSize" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" > <TextView android:id="@+id/toolbar_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:singleLine="true" android:text="Toolbar Title" android:textColor="@android:color/white" android:textSize="18sp" android:textStyle="bold" /> </android.support.v7.widget.Toolbar>

Para mostrar el logotipo en la barra de herramientas, pruebe el siguiente fragmento. // Set dibujable

toolbar.setLogo(ContextCompat.getDrawable(context, R.drawable.logo));

Déjame saber el resultado.


La respuesta anterior es totalmente cierta pero no funciona para mí.

Resolví mi problema con las siguientes cosas.

En realidad mi XML es así:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/confirm_order_mail_layout" android:layout_width="match_parent" android:layout_height="fill_parent"> <android.support.design.widget.AppBarLayout android:id="@+id/confirm_order_appbar_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/confirm_order_list_collapsing_toolbar" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" app:contentScrim="?attr/colorPrimary" app:expandedTitleMarginEnd="64dp" app:expandedTitleMarginStart="48dp" app:layout_scrollFlags="scroll|enterAlways"> <android.support.v7.widget.Toolbar android:id="@+id/confirm_order_toolbar_layout" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:layout_scrollFlags="scroll|enterAlways" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"> </android.support.v7.widget.Toolbar> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> </android.support.design.widget.CoordinatorLayout>

He intentado todas las opciones y, después de todo, simplemente CollapsingToolbarLayout debido a que no necesito usar ese XML en particular. Entonces, mi XML final es como:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/confirm_order_mail_layout" android:layout_width="match_parent" android:layout_height="fill_parent"> <android.support.design.widget.AppBarLayout android:id="@+id/confirm_order_appbar_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.v7.widget.Toolbar android:id="@+id/confirm_order_toolbar_layout" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:layout_scrollFlags="scroll|enterAlways" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"> </android.support.v7.widget.Toolbar> </android.support.design.widget.AppBarLayout> </android.support.design.widget.CoordinatorLayout>

Ahora tienes que usar setTitle() como la respuesta anterior:

mActionBarToolbar = (Toolbar) findViewById(R.id.confirm_order_toolbar_layout); setSupportActionBar(mActionBarToolbar); getSupportActionBar().setTitle("My Title");

Ahora, si desea usar CollapsingToolbarLayout y Toolbar juntos, entonces tiene que usar setTitle() de CollapsingToolbarLayout

CollapsingToolbarLayout collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.confirm_order_mail_layout); collapsingToolbarLayout.setTitle("My Title");

Que te ayude. Gracias.


La respuesta está en la documentación (que puede encontrar here ):

Para usar los métodos de la utilidad ActionBar, llame al método getSupportActionBar () de la actividad. Este método devuelve una referencia a un objeto ActionBar appcompat. Una vez que tenga esa referencia, puede llamar a cualquiera de los métodos ActionBar para ajustar la barra de aplicaciones. Por ejemplo, para ocultar la barra de aplicaciones, llame a ActionBar.hide ().

Esa es la solución que realmente encontraste. Solo pensé en dar una referencia a la documentación oficial (que aparentemente pocos tienden a leer).


Lo hice funcionar usando

toolbar.post(new Runnable() { @Override public void run() { toolbar.setTitle("My Title"); } });


No se trata solo de .setTitle

más métodos de Barra de herramientas de soporte (Appcompat v7) en onCreate solo funcionan con

getSupportActionBar().method()

y no funciona con mToolbar.method()

ejemplos:

getSupportActionBar().setTitle("toolbar title"); getSupportActionBar().setDisplayHomeAsUpEnabled(true);

aunque los siguientes métodos funcionan bien sin getSupportActionBar() en onCreate

mToolbar.setVisibility(View.VISIBLE); mToolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // }

Problema solo con el evento onCreate , aún puede usar mToolbar.setTitle() más tarde que en el molesto getSupportActionBar().setTitle() , por ejemplo, si agrega esto en onCreate funcionará (porque se ejecutará más tarde, después de onCreate )

mHandler.post(new Runnable() { @Override public void run() { mToolbar.setTitle("toolbar title"); } });

Prefiero usar esta solución https://.com/a/35430590/4548520 que https://.com/a/26506858/4548520 porque si cambia el título muchas veces (en diferentes funciones) es más cómodo de usar mToolbar.setTitle() que getSupportActionBar().setTitle() uno más getSupportActionBar().setTitle() y no ve una notificación molesta sobre la excepción nula como con getSupportActionBar().setTitle()


Para cambiar el título para cada actividad diferente.

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_pizza); setTitle(getResources().getText(R.string.title)); }


Para cualquier persona que necesite configurar el título a través de la barra de herramientas un tiempo después de configurar SupportActionBar, lea esto.

La implementación interna de la biblioteca de soporte solo comprueba si la barra de herramientas tiene un título (no nulo) en el momento en que se configura SupportActionBar. Si la hay, entonces este título se usará en lugar del título de la ventana. A continuación, puede establecer un título ficticio mientras carga el título real.

mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar); mActionBarToolbar.setTitle(""); setSupportActionBar(mActionBarToolbar);

luego...

mActionBarToolbar.setTitle(title);


Para establecer el título para cada título del fragmento de la barra de navegación

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { myView = inflater.inflate(R.layout.second_layout, container, false); getActivity().setTitle("title"); return myView; }


Prueba esto, puedes definir el título directamente en XML:

<android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:title="some title" app:popupTheme="@style/AppTheme.PopupOverlay">


Prueba esto:

Código xml

<android.support.v7.widget.Toolbar android:layout_width="match_parent" android:layout_height="120dp" android:id="@+id/tool_bar" android:background="@color/tablayout" android:theme="@style/ToolBarStyle" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/app_name" android:layout_gravity="center" android:id="@+id/toolbar_title" android:textSize="18sp" android:textColor="@color/white"/> </android.support.v7.widget.Toolbar>

Código Java

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); toolbar = (Toolbar) findViewById(R.id.tool_bar); toolbar_text = (TextView)findViewById(R.id.toolbar_title); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowTitleEnabled(false); toolbar.setLogo(R.drawable.ic_toolbar); }


Si su objetivo es establecer una cadena estática en la barra de herramientas, la forma más sencilla de hacerlo es simplemente establecer la etiqueta de actividad en AndroidManifest.xml:

<activity android:name=".xxxxActivity" android:label="@string/string_id" />

La barra de herramientas obtendrá esta cadena sin ningún código. (Funciona para mí con las bibliotecas v27).


Simplemente puedes cambiar cualquier nombre de actividad usando

Acitivityname.this.setTitle("Title NAme");


Simplemente use esto en su adaptador, donde MainActivity es su AppCompactActivity. Llámalo desde cualquier lugar.

((MainActivity) context).getSupportActionBar().setTitle(titles.get(position));


Tengo un comportamiento extraño que puede ayudarte.
Esto está funcionando pero no tiene efecto en onCreate solamente:

toolbar.setTitle("title");

Trate de usar esto en onCreate:

yourActivityName.this.setTitle("title")


Si está utilizando CollapsibleToolbarLayout junto con la Toolbar , deberá configurar el título en ambos diseños.

configura tu barra de herramientas como barra de acción en el método onCreate

protected void setUpToolBar() { if (mToolbar != null) { ((HomeActivity) getActivity()).setSupportActionBar(mToolbar); mToolbar.setTitleTextColor(Color.WHITE); mToolbar.setTitle("List Detail"); mToolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getActivity() .getSupportFragmentManager().popBackStack(); } }); ((HomeActivity) getActivity()).getSupportActionBar() .setDisplayHomeAsUpEnabled(true); } }

Más tarde, simplemente actualice el título de la barra de herramientas usando el método setTitle

mToolbar .setTitle(productFromShoppingList.getProductName()); mCollapsingToolbar.setTitle(productFromShoppingList.getProductName());


getSupportActionBar().setTitle("Your Title");