Android Lollipop Diseño del material Desbordamiento Menú Icon color
Intento el nuevo Diseño de Material en un Nexus 7 y tengo el siguiente comportamiento extraño. El icono del menú de desbordamiento tiene un color diferente en el primer lanzamiento de la aplicación.
He cambiado el android:textColorPrimary
color y leído este tutorial .
- Los elementos del menú se añaden fuera del grupo
- ¿Cuál es la mejor manera de definir constantes en android, ya sea clase estática, interfaz o recurso xml?
- Tipo de letra personalizado
- Buscar ver cerrar icono aparecer deshabilitado en lugar de blanco
- Rellenar popupmenu sin archivo XML en android
-
Lanzamiento de la primera aplicación:
-
Lanzamiento de la segunda aplicación:
Como se ve el color del color del texto principal no se establece en el primer lanzamiento. Sólo se establece si presiono el botón de inicio y vuelvo a iniciar la aplicación. Aquí está mi archivo styles.xml
:
<style name="AppBaseTheme" parent="android:Theme.Material.Light"> <item name="android:colorPrimary">#FF4444</item> <item name="android:colorPrimaryDark">#CC0000</item> <item name="android:textColorPrimary">#000000</item> </style>
¿Puede alguien explicar, por qué se produce ese comportamiento?
He establecido android:minSdkVersion="21"
y no quiero usar las bibliotecas de soporte.
- ¿Cómo se consigue dimension.xml (sw600dp) en Android Studio?
- Android: estilo de atributo desconocido en una etiqueta de fragmento
- Cómo crear una flecha que mira hacia la derecha usando xml formas en android?
- ActionLayout para los elementos de la vista de navegación se muestra en el lado derecho
- Elementos de menú no mostrados en la barra de menús
- XmlPullParserException función no admitida
- Atributos personalizados del tipo de matriz
- SyncML con Android y servicio Web de PHP
He experimentado el mismo problema al ejecutar una PreferenceActivity
que no puede utilizar la biblioteca appcompat-v7 en un dispositivo LOLLIPOP
. Cuando esta actividad se abre por primera vez el icono de desbordamiento es siempre blanco ignorando completamente android:textColorPrimary
y android:colorControlNormal
. Sin embargo, las carreras subsiguientes o los cambios de orientación dan como resultado un color apropiado.
He creado una esencia que le ayudará a mitigar esto. El código enlaza un observador de disposición global a la barra de herramientas y cuando encuentra un icono de desbordamiento, lo reemplaza y desvincula al observador. Así que no lo uses en lugares donde no esperes un icono de desbordamiento porque el observador no obtendrá desacoplado en ese caso.
Enlace a la idea: https://gist.github.com/consp1racy/4b640679de553fdb3046
Sólo tiene que añadir el color de texto secundario para el menú de opciones, es decir:
<item name="android:textColorSecondary">@color/text_color</item>
En algunas circunstancias, el color secundario se ajusta al color primario. Todavía no sé por qué.
Añada también estos artículos:
<item name="actionMenuTextColor">@color/white</item> <item name="android:actionMenuTextColor">@color/white</item>
Si esto no ayuda, intente esto:
<style name="AppBaseTheme" parent="android:Theme.Material.Light"> <item name="android:itemTextAppearance">@style/TextAppearance</item> </style> <style name="TextAppearance"> <item name="android:textColor">@android:color/white</item> </style>
Esto funcionaría para Holo.Light.DarkActionBar
Si desea utilizar el diseño de material en los dispositivos pre-21, debe ampliar el tema Theme.AppCompat.Light.NoActionBar
. Para ello, debe agregar com.android.support:appcompat-v7:21.0.0
como una dependencia de su proyecto, de esta manera podrá utilizar la barra de herramientas en su diseño.
A continuación, defina su tema en values / themes.xml :
<style name="Theme.MyTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- colorPrimary is used for the default action bar background --> <item name="colorPrimary">@color/my_awesome_color</item> <!-- colorPrimaryDark is used for the status bar --> <item name="colorPrimaryDark">@color/my_awesome_darker_color</item> <!-- colorAccent is used as the default value for colorControlActivated which is used to tint widgets --> <item name="colorAccent">@color/accent</item> <!-- You can also set colorControlNormal, colorControlActivated colorControlHighlight & colorSwitchThumbNormal. --> </style>
Y tu la barra de herramientas en tu diseño / my_activity.xml :
<android.support.v7.widget.Toolbar xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/my_awesome_toolbar" android:layout_height="wrap_content" android:layout_width="match_parent" android:minHeight="?attr/actionBarSize" android:background="?attr/colorPrimary" />
Usted tiene attrs opcional para definir el tema y popupTheme también:
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
Chris Banes escribió un buen artículo sobre esto que debe leer https://chris.banes.me/2014/10/17/appcompat-v21/
He leído en los comentarios de las preguntas que están utilizando eclipse, recomiendo encarecidamente para utilizar android studio + gradle y no eclipse.
Sólo android:theme="@style/ThemeOverlay.AppCompat.Dark"
añadir android:theme="@style/ThemeOverlay.AppCompat.Dark"
a la barra de herramientas
<android.support.v7.widget.Toolbar xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/my_awesome_toolbar" android:layout_height="wrap_content" android:layout_width="match_parent" android:theme="@style/ThemeOverlay.AppCompat.Dark android:minHeight="?attr/actionBarSize" android:background="?attr/colorPrimary" />
El icono del menú de desbordamiento será blanco ahora 🙂
public static void setOverflowButtonColor(final Activity activity, final int color) { final String overflowDescription = activity.getString(R.string.abc_action_menu_overflow_description); final ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView(); final ViewTreeObserver viewTreeObserver = decorView.getViewTreeObserver(); viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { final ArrayList<View> outViews = new ArrayList<View>(); decorView.findViewsWithText(outViews, overflowDescription, View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION); if (outViews.isEmpty()) { return; } AppCompatImageView overflow = (AppCompatImageView) outViews.get(0); overflow.setColorFilter(color); removeOnGlobalLayoutListener(decorView, this); } }); }
Utilizar este método y
setOverflowButtonColor(this, getResources().getColor(R.color.hot_pink));
Aquí está el color hot_pink.
- La barra de progreso horizontal no actualiza su estado
- Cómo almacenar un valor de tiempo en la base de datos SQLite en Android?