En essayant la nouvelle bibliothèque de support de conception, j'ai ajouté un snackbar; mais contrairement à son arrière-plan principal, la zone de texte n'est pas colorée avec la valeur par défaut de #323232
. Au lieu de cela, il ressemble à comme ceci . Il semble prendre sa couleur de la valeur Android:background
définie dans le thème personnalisé dans mon styles.xml
, qui se présente comme suit:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
<item name="Android:background">#4f4f5e</item>
...
</style>
Si j'essaie de le colorier avec force
View snackbarView = snackbar.getView();
snackbarView.setBackgroundColor(Color.YELLOW);
cela n'affecte que l'arrière-plan principal, comme ceci , et l'arrière-plan du texte est toujours coloré par le thème personnalisé. Existe-t-il un moyen de conserver mon thème personnalisé et d’avoir un snack-bar standard? Merci!
Pour changer la couleur d'arrière-plan de la barre, vous pouvez effectuer le code suivant:
Snackbar snack = Snackbar.make(...);
ViewGroup group = (ViewGroup) snack.getView();
group.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.red));
snack.show();
Au lieu de rouge, vous pouvez utiliser la couleur par défaut du Snackbar: # 323232
Le snackbar contient un TextView, vous devez donc changer la couleur de fond pour le deux, le snackbar comme vous l'avez déjà fait, puis le TextView comme ceci:
View snackbarView = snackbar.getView();
TextView textView = (TextView)snackbarView.findViewById(Android.support.design.R.id.snackbar_text);
textView.setBackgroundColor(Color.YELLOW);
.setBackgroundColor
vous permet de changer la couleur de fond du snackbar
msnackBar.setBackgroundColor(Color.parseColor("#009688"));
ou
msnackBar.setBackgroundColor(getResources().getColor(R.color.BLUE)););
Here est un didacticiel complet sur l'utilisation de snackbar à l'aide de la bibliothèque de support de conception.
Voici un exemple complet:
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();
remplacez MainActivity.this par votre activité actuelle ou getAppContext ()
Vous pouvez simplement créer votre propre classe Snackbar et simuler la méthode make de Snackbar. Pour ce faire, il vous suffit d'utiliser cette classe au lieu du widget snackbar d'Android.
Snackbar.class
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 {}
}
Utilisation:
// 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();
}
}
J'espère que cela t'aides!
Vous pouvez utiliser cette bibliothèque: https://github.com/SandroMachado/restaurant
new Restaurant(MainActivity.this, "Snackbar with custom background and text color", Snackbar.LENGTH_LONG)
.setBackgroundColor(Color.GRAY)
.show();
Disclaimer: J'ai fait la bibliothèque.
Cet effet se produit lorsque l'attribut Android:background
est défini dans le style.
Si vous supprimez cette option, cela affectera bien sûr toutes les mises en page de votre application, mais snackbar sera corrigé.
C'est comme ça que j'utilise un snack personnalisé
Snackbar snackbar_network = Snackbar.make(rLayout, "Your Message", Snackbar.LENGTH_SHORT)
.setAction("EXIT", new View.OnClickListener() {
@Override
public void onClick(final View v) {
finish();
}
});
Action Text Color
snackbar_network.setActionTextColor(Color.RED);
Action Message Couleur du texte
final View sbView = snackbar_network.getView();
final TextView tv = (TextView) sbView.findViewById(Android.support.design.R.id.snackbar_text);
tv.setTextColor(Color.YELLOW);
Définir l'arrière-plan du snack-bar
sbView.setBackgroundColor(ContextCompat.getColor(MapsActivity.this, R.color.black));
snackbar_network.show();
Cela fonctionne pour moi:
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();
J'ai également fait face à un problème similaire et, malheureusement, aucune solution ne fonctionne pour moi. Par conséquent, j'écris ma propre solution dans laquelle je règle également la couleur d'arrière-plan pour la vue parent.
TextView snackbarTextView = snackbar.getView().findViewById(Android.support.design.R.id.snackbar_text);
snackbarTextView.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.colorPrimary));
ViewParent parentView = snackbarTextView.getParent();
if (parentView instanceof View) {
((View) parentView).setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.colorPrimary));
}
View snackbarView = snackbar.getView();
snackbarView.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.colorPrimary));
snackbar.show();