Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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 .

  1. Lanzamiento de la primera aplicación: Primer lanzamiento de la aplicación

  2. Lanzamiento de la segunda aplicación: Introduzca aquí la descripción de la imagen

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.

  • Android: ¿Cómo url de la tienda en el archivo de recursos string.xml?
  • Error de Eclipse: Error al analizar ... \ android-22 \ android-wear \ armeabi-v7a \ devices.xml
  • Appcompat res values-v21 Los errores de themes_base en eclipse no desaparecen
  • Iconos aplastados en la barra de herramientas después de cambiar a Android SDK 26
  • ¿El tema de AppCompat DayNight no funciona en Android 6.0?
  • Lectura de un archivo de texto o de un archivo XML en Android java
  • ¿Cómo eliminar la sombra sobre la barra de aplicaciones?
  • ActionBar / Barra de herramientas no se muestra en la versión de Lollipop de la aplicación
  • 6 Solutions collect form web for “Android Lollipop Diseño del material Desbordamiento Menú Icon color”

    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.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.