J'ai affiché Snackbar en utilisant CoordinatorLayout mais dans certaines mises en page, je n'ai pas utilisé la mise en page CoordinatorLayout et je veux afficher le snackbar mais j'ai rencontré un problème avec cela.
J'ai essayé la manière suivante de réaliser le snack-bar sans CoordinatorLayout mais il affichera le résultat suivant.
Snackbar.make(getActivity().getWindow().getDecorView().getRootView(), "Testing Snackbar", Snackbar.LENGTH_LONG).show();
Testez-le avec Android 8.0 Oreo
Existe-t-il un moyen de réaliser Snackbar sans CoordinatorLayout?
Merci d'avance.
code
public class FirstFragment extends Fragment {
RelativeLayout rootView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_first, container, false);
Log.e("onCreateView", "onCreateView");
rootView = (RelativeLayout)view.findViewById(R.id.rootView);
setSnackBar(rootView, "Testing with answered");
return view;
}
public static void setSnackBar(View coordinatorLayout, String snackTitle) {
Snackbar snackbar = Snackbar.make(coordinatorLayout, snackTitle, Snackbar.LENGTH_SHORT);
snackbar.show();
View view = snackbar.getView();
TextView txtv = (TextView) view.findViewById(Android.support.design.R.id.snackbar_text);
txtv.setGravity(Gravity.CENTER_HORIZONTAL);
}
}
public static void setSnackBar(View root, String snackTitle) {
Snackbar snackbar = Snackbar.make(root, snackTitle, Snackbar.LENGTH_SHORT);
snackbar.show();
View view = snackbar.getView();
TextView txtv = (TextView) view.findViewById(Android.support.design.R.id.snackbar_text);
txtv.setGravity(Gravity.CENTER_HORIZONTAL);
}
Appelez simplement la méthode ci-dessus et passez n'importe quelle disposition parent telle que LinearLayout
, RelativeLayout
ou ScrollView
, par exemple:
setSnackBar(layout,"This is your SnackBar"); //here "layout" is your parentView in a layout
N'oubliez pas de trouver votre vue à l'aide de findViewById()
.
Essayez ce morceau de code facile .. une vue factice du cadre Android lui-même est utilisé
Snackbar.make(findViewById(Android.R.id.content),"Your Text Here",Snackbar.LENGTH_SHORT).show();
Comme d'autres le suggèrent, la meilleure solution consiste à utiliser la méthode mentionnée précédemment. J'ajouterais et une option pour afficher SnackBar avec un bouton pour fermer SnackBar. Cela s'avère utile lorsque vous souhaitez donner à l'utilisateur le temps de lire votre message, puis reconnaître votre application que votre utilisateur a lu votre message.
public void setSnackBar(View root, String textToDisplay) {
Snackbar snackbar = Snackbar.make(root, textToDisplay, Snackbar.LENGTH_INDEFINITE);
snackbar.setAction("OK", new View.OnClickListener() {
@Override
public void onClick(View view) {
snackbar.dismiss();
//your other action after user hit the "OK" button
}
});
snackbar.show();