Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Display Snackbar without CoordinatorLayout

I have Displayed Snackbar using CoordinatorLayout but in some layout i did't used CoordinatorLayout layout and i want to display snackbar but faced problem with it.

I have tried following way to achieve snackbar without CoordinatorLayout but it will display following result.

Snackbar.make(getActivity().getWindow().getDecorView().getRootView(), "Testing Snackbar", Snackbar.LENGTH_LONG).show();

enter image description here

Test it with android 8.0 Oreo

Is there any way to achieve Snackbar without CoordinatorLayout?

Thanks in advance.

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);
    }
}
like image 317
Nilesh Panchal Avatar asked Sep 18 '17 08:09

Nilesh Panchal


4 Answers

Try this easy piece of code.. a dummy view from the android framework itself is used

Snackbar.make(findViewById(android.R.id.content),"Your Text Here",Snackbar.LENGTH_SHORT).show();

like image 142
Pemba Tamang Avatar answered Oct 17 '22 23:10

Pemba Tamang


As others suggest best solution to do this is via method mentioned before. I would add and option to show SnackBar with button to dismiss SnackBar. This comes useful when you'd like to give user time to read your message and then acknowledge your application that your user read your 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();
like image 40
Rezor Avatar answered Oct 17 '22 23:10

Rezor


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

Just call the above method and pass any parent layout such as LinearLayout, RelativeLayout or ScrollView, for example:

setSnackBar(layout,"This is your SnackBar");  //here "layout" is your parentView in a layout

Do not forget to find your view using findViewById().

like image 34
Shashwat Gupta Avatar answered Oct 17 '22 23:10

Shashwat Gupta


use this view instance of CoordinatorLayout:

View view = findViewById(android.R.id.content);
Snackbar snackbar = Snackbar.make(view, "your text", Snackbar.LENGTH_SHORT);
snackbar.show();
like image 1
m.sajjad.s Avatar answered Oct 18 '22 00:10

m.sajjad.s