web-dev-qa-db-fra.com

Afficher la barre de collation sans coordinateur

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();

enter image description here

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);
    }
}
9
Nilesh Panchal
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().

14
Shashwat Gupta

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();

15
Pemba Tamang

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();
0
Rezor