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 ().
Consulte https://code.google.com/p/android/issues/detail?id=77763 . Aparentemente se supone que funciona así. Una vez que llama a la llamada al método setSupportActionBar()
, es responsabilidad del delegado de ActionBar encaminar la llamada a la vista correcta.
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
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");