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(); 
  • Libros sobre Android Diseño de interfaces de usuario
  • ¿Cómo puedo replicar este patrón de interfaz de usuario: haga clic en el elemento ListView y expanda debajo de él?
  • RelativaLayout TextView superposición
  • Ver dentro de ScrollView no ocupa todo el lugar
  • Cuando getView () en ArrayAdapter se llama
  • Desactivación del botón de Android si los campos de texto están vacíos
  • Cómo calcular dp de píxeles en android programaticamente
  • ¿Cómo puedo hacer el diseño que funcionará tanto en Tablet como en el teléfono?
  • Diseño de widget Android - fondo negro predeterminado
  • TextView con cadenas demasiado largas
  • Desplazamiento de EditText dentro de ScrollView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.