android的SnackBar传参问题

我希望我的App在切换到后台后,弹窗提示,参数view该传什么

public class MyApplication extends Application {

  @Override
    public void onCreate() {
        super.onCreate();

        this.registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {



         @Override
            public void onActivityStopped(Activity activity) {

                Snackbar.make(view,"弹窗提示",,Snackbar.LENGTH_SHORT).show();
            }

}
 



}

在Android中,你无法直接获得手机桌面的View,因为桌面是另一个应用程序的界面,你的应用程序无法直接访问或操作其他应用程序的视图。
可以考虑使用一种不同的方法实现这个弹窗,例如在你的活动的onPause()方法中显示弹窗提示。这样,在你的应用程序切换到后台时,onPause()方法会被调用,你可以在其中显示弹窗提示。以下是一个在活动的onPause()方法中显示弹窗提示的示例:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onPause() {
        super.onPause();
        View view = findViewById(android.R.id.content);
        Snackbar.make(view, "弹窗提示", Snackbar.LENGTH_SHORT).show();
    }
}
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 文章:Snackbars从顶部滑出的实现 中也许有你想要的答案,请看下吧
  • 除此之外, 这篇博客: Android Snackbar的使用中的 用法 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    它需要配合CoordinatorLayout使用,可以在xml中写个CoordinatorLayout也可以使用下面的代码获取CoordinatorLayout

    View decorView = getWindow().getDecorView();
    CoordinatorLayout coordinatorLayout = decorView.findViewById(R.id.content);
    

    简单用法

    Snackbar.make(coordinatorLayout,"展示Snackbar",Snackbar.LENGTH_SHORT).show();
    

    是不是看着很面熟,不能说给Toast的用法差不多,那简直是一模一样啊。上个Toast的用法对比一下:

    Toast.makeText(this,"展示Snackbar",Toast.LENGTH_SHORT).show();
    

    是不是看着一模一样。
    用法是一样的,但是展示的位置是不一样的,Toast默认展示位置是靠近在屏幕的底部,而Snackbar的默认展示位置是在屏幕的底部

    在这里插入图片描述
    靠上的那个是Toast所展示的内容,下面的撑满屏幕的则是Snackbar所展示的内容。

  • 以下回答来自chatgpt:

    在Android App被切换到后台时,可以使用如下代码展示SnackBar弹出提示框,需要传入需要提示的文本作为参数:

    View rootView = this.getWindow().getDecorView();
    View contentLayout = rootView.findViewById(android.R.id.content);
    Snackbar snackbar = Snackbar.make(contentLayout, "需要提示的文本", Snackbar.LENGTH_SHORT);
    snackbar.show();
    

    其中,通过 getWindow() 获取当前Activity的窗口,再通过 getDecorView() 获取根View;通过 findViewById() 获取当前Activity显示的内容的布局,一般是Android系统自带的android.R.id.content;通过 Snackbar.make() 创建一个SnackBar实例,参数一传入显示内容的View,参数二传入需要提示的文本,参数三传入SnackBar显示时间,具体时间可以根据实际情况设置;最后使用 show() 方法展示SnackBar。

    如果想要自定义SnackBar的布局,可以使用参考资料中提到的自定义布局方法,创建一个自定义布局的View,使用 LayoutInflater 加载自定义布局,再通过 Snackbar.getView() 获取SnackBar的布局View,将自定义布局View添加到SnackBar布局View中即可:

    View rootView = this.getWindow().getDecorView();
    View contentLayout = rootView.findViewById(android.R.id.content);
    Snackbar snackbar = Snackbar.make(contentLayout, "", Snackbar.LENGTH_SHORT);
    
    // 设置SnackBarViewpadding都为0,避免出现黑色边框背景的情况
    snackbar.getView().setPadding(0, 0, 0, 0);
    // SnackBarView的背景颜色设置为透明,避免在自定义布局中有圆角或者自适应宽度的时候显示一块黑色背景的情况
    snackbar.getView().setBackgroundColor(Color.TRANSPARENT);
    
    // 获取到SnackBar.getView获取的SnackBarview
    Snackbar.SnackbarLayout snackbarLayout = (Snackbar.SnackbarLayout) snackbar.getView();
    // 加载咱们自定义的布局
    View customView = LayoutInflater.from(snackbarLayout.getContext()).inflate(R.layout.custom_snackbar, null);
    // 通过自定义布局中的控件
    TextView textView = customView.findViewById(R.id.tv_custom_snackbar);
    // 设置自定义的文案
    textView.setText("自定义提示内容");
    
    // 将获取的自定义布局view添加到SnackBarViewsnackbarLayout.addView(customView);
    
    snackbar.show();
    

    其中,自定义布局的布局文件为 custom_snackbar.xml,包含一个TextView控件用于显示需要提示的文本,具体的布局根据实际需要进行设计即可。在自定义布局中,也可以像参考资料中示例一样添加点击事件等操作,以满足各种需求。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^