显示没有CoordinatorLayout的Snackbar

时间:2017-09-18 08:43:38

标签: android snackbar

我使用CoordinatorLayout显示Snackbar但在某些布局中我没有使用CoordinatorLayout布局,我想显示小吃吧但是遇到了问题。

我尝试过以下方法来实现没有CoordinatorLayout的snackbar,但它会显示以下结果。

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

enter image description here

用android 8.0 Oreo测试它

有没有办法在没有CoordinatorLayout的情况下实现Snackbar?

提前致谢。

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

4 个答案:

答案 0 :(得分:13)

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

只需调用上述方法并传递任何父级布局,例如LinearLayoutRelativeLayoutScrollView,例如:

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

不要忘记使用findViewById()找到您的观点。

答案 1 :(得分:13)

尝试这段简单的代码..使用Android框架本身的虚拟视图

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

答案 2 :(得分:0)

正如其他人建议的那样,最好的解决方案是通过前面提到的方法。我将添加和选项以使用按钮显示SnackBar来关闭SnackBar。当您想给用户时间阅读您的消息,然后确认您的应用程序已使您的用户阅读您的消息时,此功能很有用。

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

答案 3 :(得分:0)

使用以下 CoordinatorLayout view 实例:

View view = findViewById(android.R.id.content);
Snackbar snackbar = Snackbar.make(view, "your text", Snackbar.LENGTH_SHORT);
snackbar.show();