El tema personalizado interfiere con el color de fondo del bocadillo

Probando la nueva Biblioteca de Diseño de Soporte, agregué un snackbar; Pero a diferencia de su fondo principal, el área de texto no está coloreada con el valor predeterminado de #323232 . En su lugar, se ve así . Parece tomar su color del android:background valor de android:background definido en el tema personalizado en mi styles.xml , que va como esto:

 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> ... <item name="android:background">#4f4f5e</item> ... </style> 

Si intento forzarlo con

 View snackbarView = snackbar.getView(); snackbarView.setBackgroundColor(Color.YELLOW); 

Sólo afecta el fondo principal, así , y el fondo del texto sigue siendo coloreado por el tema personalizado. ¿Hay una manera de mantener mi tema personalizado, y tener un snackbar estándar? ¡Gracias!

Para cambiar el color de fondo de la Snackbar puedes hacer lo siguiente desde el código:

 Snackbar snack = Snackbar.make(...); ViewGroup group = (ViewGroup) snack.getView(); group.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.red)); snack.show(); 

En lugar de rojo puedes usar el color predeterminado de la Snackbar: # 323232

.setBackgroundColor permite cambiar el color de fondo de snackbar

 msnackBar.setBackgroundColor(Color.parseColor("#009688")); 

o

  msnackBar.setBackgroundColor(getResources().getColor(R.color.BLUE));); 

Aquí está un tutorial completo para usar la barra de ayuda usando la biblioteca de soporte de diseño.

La barra de menús contiene un TextView, por lo que necesita cambiar el color de fondo para ambos, el snackbar de la manera que ya lo hizo, y luego el TextView como este:

 View snackbarView = snackbar.getView(); TextView textView = (TextView)snackbarView.findViewById(android.support.design.R.id.snackbar_text); textView.setBackgroundColor(Color.YELLOW); 

Aquí hay una muestra completa:

 Snackbar snack = Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null); ViewGroup group = (ViewGroup) snack.getView(); group.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.blue)); snack.show(); 

Reemplace MainActivity.this con su actividad actual o getAppContext ()

Simplemente puede crear su propia clase Snackbar y simular el método make de Snackbar. Haciendo esto, usted apenas tiene que utilizar esta clase en vez del widget del snackbar del androide.

Clase Snackbar

 import android.graphics.Color; import android.support.annotation.IntDef; import android.support.annotation.IntRange; import android.support.annotation.NonNull; import android.support.design.widget.CoordinatorLayout; import android.support.design.widget.FloatingActionButton; import android.view.View; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; public class Snackbar { /** Snackbar's lengths **/ public static final int LENGTH_SHORT = android.support.design.widget.Snackbar.LENGTH_SHORT; public static final int LENGTH_LONG = android.support.design.widget.Snackbar.LENGTH_LONG; public static final int LENGTH_INDEFINITE = android.support.design.widget.Snackbar.LENGTH_INDEFINITE; @NonNull public static android.support.design.widget.Snackbar make(@NonNull View view, @NonNull CharSequence text, @Duration int duration) { android.support.design.widget.Snackbar snackbar = android.support.design.widget.Snackbar.make(view, text, duration); // TODO: This is where you have to customize your snackbar snackbar.getView().setBackgroundColor(Color.RED); return snackbar; } @NonNull public static android.support.design.widget.Snackbar make(@NonNull View view, @StringRes int resId, @Duration int duration) { return make(view, view.getResources().getText(resId), duration); } // Optional @IntDef({LENGTH_INDEFINITE, LENGTH_SHORT, LENGTH_LONG}) @IntRange(from = 1) @Retention(RetentionPolicy.SOURCE) public @interface Duration {} } 

Utilizar:

 // WARNING: Make sure you're using your snackbar's package import com.mypackage.custom_views.Snackbar; public class MyActivity extends Activity { ... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... Snackbar.make(view, R.string.my_msg, Snackbar.LENGTH_LONG).show(); } } 

¡Espero que esto ayude!

Este efecto ocurre cuando en el atributo de estilo android:background se establece el android:background .

La eliminación de que, por supuesto, afectará a todos los diseños en su aplicación, pero snackbar se solucionará.

Puede utilizar esta biblioteca: https://github.com/SandroMachado/restaurant

 new Restaurant(MainActivity.this, "Snackbar with custom background and text color", Snackbar.LENGTH_LONG) .setBackgroundColor(Color.GRAY) .show(); 

Renuncia: Hice la biblioteca.

Esto es cómo estoy usando la barra de encargo

  Snackbar snackbar_network = Snackbar.make(rLayout, "Your Message", Snackbar.LENGTH_SHORT) .setAction("EXIT", new View.OnClickListener() { @Override public void onClick(final View v) { finish(); } }); 

Acción Color del texto

  snackbar_network.setActionTextColor(Color.RED); 

Acción Mensaje Color del texto

  final View sbView = snackbar_network.getView(); final TextView tv = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text); tv.setTextColor(Color.YELLOW); 

Definir el fondo de la barra de Snackbar

 sbView.setBackgroundColor(ContextCompat.getColor(MapsActivity.this, R.color.black)); snackbar_network.show(); 

Funciona de esta manera para mí:

 LinearLayout linearLayout = (LinearLayout) findViewById(R.id.ll); Snackbar snackbar = Snackbar.make(lineatLayout, "TEXT", Snackbar.LENGTH_LONG); ViewGroup group = (ViewGroup) snackbar.getView(); group.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.yourColor)); TextView textView = (TextView) group.findViewById(android.support.design.R.id.snackbar_text); textView.setTextColor(ContextCompat.getColor(this, R.color.yor collor)); snackbar.show(); 
  • ¿Cómo hacer ScrollView con un RelativeLayout con varios diseños de niño llenar la pantalla?
  • Android: guardar el estado del diseño cambiado dinámicamente
  • RemoveAllViews no quitar vistas
  • Cuando getView () en ArrayAdapter se llama
  • Quiero google play store como scrollview
  • Android PhoneGap con controles nativos
  • EditText añadido programaticamente difiere de la versión XML
  • ¿Cómo crear un círculo clippath de una imagen?
  • Android - Actividades vs Vistas
  • Ventaja de ListFragment sobre un ListView o Fragmento normal
  • Paneles deslizantes para Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.