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
- Contenido dinámico dentro de una lista en Android
- Vista personalizada que divide el diseño en diagonal con diferentes vistas secundarias
- GetMeasuredWidth devuelve un valor totalmente erróneo
- Implementación de la retroinstalación adecuada y manejo de botones de inicio mediante la barra de herramientas en Android
- ¿Dónde puedo obtener un icono de búsqueda en blanco?
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!
- Combine layout_weight y maxWidth para las vistas
- ¿Cómo coloco los widgets encima y debajo de una vista de lista?
- Cambiar los archivos de diseño en la misma actividad
- Estilo de diseño personalizado para Android ActionBar
- LibGDX - Escala de imagen con relación fija
- Aplicación para Android: admite todos los tamaños de pantalla
- ¿Cuál es el mejor diseño de paquetes?
- Habilitar desplazamiento dentro de EditText que está en ScrollView
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();
- Android Studio: Cambiar una URL dependiendo de buildtype? (Utilizado para probar en depuración / liberación)
- Android: getString () de los recursos pierde las etiquetas de la cadena