Obtener ActionBar Título TextView con AppCompat v7 r21

Tengo una biblioteca que requiere utilizar el color del TextView para el título de ActionBar. Antes de AppCompat v7 r21 podría findViewById y obtener el color de la vista directamente. Sin embargo, por alguna razón ahora que no funciona. La vista siempre es nula. He escrito código que analiza toda la jerarquía de vista e imprime los ID, tipos y valores para todas las TextViews. La vista del título no tenía identificación, que me parece muy raro.

Una cosa que noté fue cuando intenté obtener el ActionBar lo que se devolvió era una barra de herramientas (aunque no use una barra de herramientas en mi aplicación). Así que iteré sobre las vistas de los niños de la barra de herramientas y cada vez que se encontró un TextView comparé su valor de texto con toolbar.getTitle () para asegurarme de que es el TextView que estoy buscando. No es ideal y no estoy seguro si funcionará para todos los casos.

¿Alguien sabe cuál podría ser la solución más segura?

No hay necesidad de crear su propio TextView, simplemente pasar por los niños de la barra de herramientas para obtener el título incorporado.

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); // loop through all toolbar children right after setting support // action bar because the text view has no id assigned // also make sure that the activity has some title here // because calling setText() with an empty string actually // removes the text view from the toolbar TextView toolbarTitle = null; for (int i = 0; i < toolbar.getChildCount(); ++i) { View child = toolbar.getChildAt(i); // assuming that the title is the first instance of TextView // you can also check if the title string matches if (child instanceof TextView) { toolbarTitle = (TextView)child; break; } } 

Normalmente, cuando se utiliza la barra de herramientas en mis casos, si estoy haciendo algo personalizado con el título, sólo se inflar la vista de título manualmente, a continuación, establecer sus atributos en XML. El punto de la barra de herramientas es evitar que cosas como esta sucedan, por lo que puede tener más control sobre lo que su barra de herramientas se ve como

  <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/my_awesome_toolbar" android:layout_height="@dimen/standard_vertical_increment" android:layout_width="match_parent" android:minHeight="@dimen/standard_vertical_increment" android:background="@drawable/actionbar_background"> <TextView style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title" android:id="@+id/toolbar_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/Red" /> </android.support.v7.widget.Toolbar> 

Entonces en el código, usted haría algo como esto:

 Toolbar toolbar = findViewById(R.id.my_awesome_toolbar); //Get rid of the title drawn by the toolbar automatically toolbar.setTitle(""); TextView toolbarTitle = (TextView) toolbar.findViewById(R.id.toolbar_title); toolbarTitle.setTextColor(Color.BLUE); 

Sé que esto es un poste más viejo, pero ésta ha sido la mejor manera que he encontrado para permitir el color y las fuentes de encargo del textc en la barra de herramientas

Lo conseguí usando la reflexión.

 toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.setTitle("Title"); //important step to set it otherwise getting null TextView title = null; try{ Field f = toolbar.getClass().getDeclaredField("mTitleTextView"); f.setAccessible(true); title = (TextView) f.get(toolbar); title.setText("I have title TextView"); } catch(Exception e){ e.printStackTrace(); } 

Tenga en cuenta que funciona si la barra de herramientas I no está configurada para admitir ActionBar …

 setSupportActionBar(toolbar); // with this set text view behave differently //and text may not be visible... 

Puedes hacer esto.

 Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar); TextView title=(TextView )toolbar.getChildAt(0); 

Esto es trabajo para mí.

  • La importación com.google.android.gms.location.LocationClient no se puede resolver después de formatear el equipo
  • Error de biblioteca Appcompat: No se encontró ningún recurso que coincida con el nombre dado
  • Cambiar el color de la barra de herramientas en Appcompat 21
  • ¿Cómo vuelvo a empaquetar un AAR para la fusión del manifiesto gradle de Android?
  • Android DialogFragment con tema de AppCompat tema
  • Cómo utilizar SearchView de tema oscuro en el tema Light Appcompat
  • Establecimiento de elevación en XML en AppCompat CardView en Android 5.0
  • ¿Por qué mi vista de barra de acciones personalizadas no coincide con "parent" cuando se utiliza appcompat y Toolbar?
  • ¿Es posible alinear a la izquierda SearchView en AppCompat 21 con la barra de herramientas?
  • ¿Puedo usar Activity en lugar de ActionbarActivity sin Actionbar en Appcompat-v7?
  • Android lollipop toolbar conmutador entre abrir / cerrar el cajón y el botón Atrás
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.