简单的 android Snackbar 不起作用

Posted

技术标签:

【中文标题】简单的 android Snackbar 不起作用【英文标题】:simple android Snackbar not working 【发布时间】:2016-08-19 17:57:52 【问题描述】:

单击按钮后,我试图在我的应用程序的 MainActivity 中显示一个非常简单的 Snackbar。此按钮还导致新活动的开始。但是在我点击它之后,没有 Snackbar 显示并且新的 Activity 开始了。我的 MainActivity 是一个 RelativeLayout,我不太想将它更改为 CoordinatorLayout。

<RelativeLayout
 <TextView
        android:id="@+id/tvReceived"
        android:layout_
        android:layout_
        android:text="Messages Received"
        android:textSize="25sp"
        android:gravity="center"
        android:textStyle="bold"
        android:textAllCaps="false"
        android:textColor="#3079ab"
        android:layout_marginTop="10dp"/>

    <LinearLayout
        android:id="@+id/linearMain"
        android:layout_
        android:layout_
        android:layout_below="@+id/tvReceived"
        android:layout_marginTop="7dp"
        android:layout_marginBottom="50dp">
        <FrameLayout
            android:id="@+id/receivedList"
            android:layout_
            android:layout_>
        </FrameLayout>
    </LinearLayout>

    <Button
        android:id="@+id/newMessage"
        android:layout_
        android:layout_
        android:text="New Message"
        android:textAllCaps="false"
        android:textSize="16sp"
        android:layout_alignParentBottom="true"
        android:layout_alignEnd="@+id/linearMain"
        android:layout_marginBottom="32dp" />
</RelativeLayout>

Snackbar 的 Java 代码:

Button btnNewSms = (Button) findViewById(R.id.newMessage);
btnNewSms.setOnClickListener(new View.OnClickListener() 
   @Override
   public void onClick(View v) 
      Snackbar mySnackbar = Snackbar.make(v, R.string.new_message, Snackbar.LENGTH_LONG);
      mySnackbar.show();
      Intent intent = new Intent(MainActivity.this, ComposeActivity.class);
      startActivity(intent);
     
);

怎么了?提前致谢!

【问题讨论】:

评论你的意图并运行代码,当点击按钮时活动开始,你看不到snackbar。尝试让我知道它是否有效 没什么问题。当第二个启动时,您在第一个 Activity 中看不到 SnackbarstartActivity() 电话不会等待您的 Snackbar,如果您是这样想的话。 啊...是的,它成功了!我可以在 Snackbar 出现后开始新的活动吗? CoordinatorLayout 需要这样做吗? 您可以在两个操作之间设置延迟(不推荐)。改用吐司。 Snackbars 似乎旨在替代 Android 中的 toasts。但是,toast 不依赖于活动,它们只需要一个上下文,这意味着它们也可以从服务中使用,这与 Snackbars 不同。 @Emile 检查我的答案,您可以使用按钮无限显示 SnackBar,单击按钮即可使用 Intent 打开您的活动 【参考方案1】:

注释您的意图并运行代码,单击按钮时Activity 正在启动,您看不到Snackbar。 您可以点击Snackbar 中的按钮打开Activity,方法如下

 public void showMsgSnack(String msg) 

        snackbar = Snackbar.make(getCurrentFocus(), "Your Message here", Snackbar.LENGTH_INDEFINITE).setAction("Open", new View.OnClickListener() 
            @Override
            public void onClick(View v) 
                    //Your Intent here
            
        );
        snackbar.show();
    

试试看是否有效

【讨论】:

以上是关于简单的 android Snackbar 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Snackbar 在片段类中不起作用

为啥 View.Gone 在 Snackbar 中不起作用?

autoHideDuration 在使用钩子的 Snackbar 中不起作用[关闭]

Android Snackbar简单解析

Android开发——Snackbar使用详解

Snackbar 操作文本颜色不变