显示没有 CoordinatorLayout 的 Snackbar

Posted

技术标签:

【中文标题】显示没有 CoordinatorLayout 的 Snackbar【英文标题】:Display Snackbar without CoordinatorLayout 【发布时间】:2018-02-26 17:45:02 【问题描述】:

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

我尝试了以下方法来实现没有 CoordinatorLayout 的小吃店,但它会显示以下结果。

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

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

【问题讨论】:

【参考方案1】:

试试这段简单的代码.. 使用来自 android 框架本身的虚拟视图

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

【讨论】:

我试图在适配器类中显示一个快餐栏,这非常有效,因为我传递给我的适配器的只是上下文。 完美的想法比x 据我所知,它基本上可以与任何视图一起使用,所以这里的小吃栏从 android 框架本身获得了一个可以正常工作的视图。 你应该得到奖牌!【参考方案2】:
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() 查找您的视图。

【讨论】:

首先感谢我尝试过的答案,但它会给出以下错误从给定的视图中找不到合适的父级。请提供有效的观点。 @NileshPanchal 在我的情况下它适用于任何视图,我刚刚将这段代码放在我的 Utils 类中并调用了这个方法,它就像魅力一样工作 @NileshPanchal 你有没有提供并找到你的父视图id?? 你好 @Shashwat Gupta 它在 Activity 上运行良好,但在 Fragment 上运行良好,我想要在 Fragment 中运行。不用担心,我已经接受了您的回答,可能会对其他人的回答有所帮助。 我没有在fragment中尝试过,如果你想在fragment中使用,只需将此方法放入activity并从fragment调用它【参考方案3】:

正如其他人建议的那样,最好的解决方案是通过前面提到的方法。我会添加一个选项来显示带有按钮的 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();

【讨论】:

【参考方案4】:

使用 CoordinatorLayout 的这个 view 实例:

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

【讨论】:

与这个答案***.com/a/48192738/5049244有什么区别?

以上是关于显示没有 CoordinatorLayout 的 Snackbar的主要内容,如果未能解决你的问题,请参考以下文章

CoordinatorLayout 中 AppBarLayout 下面的 WebView 不起作用

CoordinatorLayout_Behavior控制Toolbar&Fab的显示和隐藏

当它隐藏在另一个片段中时,以编程方式在 CoordinatorLayout 中显示 BottomNavigationView

coordinatorlayout 中的重叠视图

当 SnackBar 出现在 CoordinatorLayout 中时上移视图

CoordinatorLayout+AppBarLayout顶部栏吸顶效果