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í.

  • Deshacerse de la sombra de ActionBar sobre SlidingTabLayout
  • ActionBar con AppCompat actionBarItemBackground no funciona
  • DrawerLayout, NavigationView y android: Theme.Material.Light no es compatible?
  • Cómo cambiar el tema de la barra de herramientas de AppCompat v21 mediante programación?
  • Appcompat falta en la carpeta sdk
  • Biblioteca de soporte de Android 24.0.0 no muestra texto en SearchView
  • El uso de SearchView con AppCompatActivity genera fallas en la interfaz de usuario
  • ¿Dónde puedo encontrar las plantillas de Android Studio para la secuencia de comandos Activity and gradle?
  • Utilice la pestaña con la nueva barra de herramientas (AppCompat v7-21)
  • OnPrepareOptionsMenu en Fragmento no se llama como de AppCompat v22 (API 10)
  • Base.Widget.AppCompat.Button vs Widget.AppCompat.Button
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.