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.
- Error en el archivo styles_base.xml - aplicación android - No se encontró ningún recurso que coincida con el nombre dado 'android: Widget.Material.ActionButton'
- PreferenceInternet no se abre con PreferenceFragmentCompat
- ¿Cómo hacer transparente AppCompat estilo?
- El botón del diseño del material de la prensa larga permite pegar en la etiqueta del botón
- Error al usar Robolectric para probar un ActionBarActivity
¿Alguien sabe cuál podría ser la solución más segura?
- Cómo utilizar setOutlineProvider en lugar de setOutline en Lollipop
- AppCompatv7 Edición de Android 5.0
- AppCompat DayNight tema siempre aparece como un tema de luz?
- Cómo animar Burger to Arrow con Appcompat v7 21, Toolbar y DrawerLayout
- Appcompat v21 Elevación de la barra de herramientas pre-lollipop
- Personalización del espaciado de los hiladores
- Cómo cambiar los iconos de los iconos del menú de navegación y desbordamiento de la barra de herramientas (appcompat v7)?
- Debería usar android: showAsAction cuando no esté usando la librería appcompat
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í.
- AdMob consigue el dinero a paypal / banco / cheque
- ¿Cómo puedo solucionar esta versión de la biblioteca de renderizado es más reciente que su versión de ADT plug-in en eclipse