我希望能够显示 Snackbars,但我对必须为其提供视图的想法感到困惑。您可能认为默认情况下它允许您在屏幕底部显示 Snackbar,但也许我遗漏了一些东西。
无论如何,这可以通过使用视图来完成:
findViewById(android.R.id.content)
但是,我收到一个警告,即使它似乎总是在我尝试的任何地方都有效,这可能为空。什么时候可能为空?
我希望能够显示 Snackbars,但我对必须为其提供视图的想法感到困惑。您可能认为默认情况下它允许您在屏幕底部显示 Snackbar,但也许我遗漏了一些东西。
无论如何,这可以通过使用视图来完成:
findViewById(android.R.id.content)
但是,我收到一个警告,即使它似乎总是在我尝试的任何地方都有效,这可能为空。什么时候可能为空?
findViewById
如果您尝试查找当前布局中不存在的视图,则始终可以为空。
警告只是一种帮助。它可能非常通用,如果你查看Activity类的源代码,你会发现这个方法:
@Nullable
public View findViewById(@IdRes int id) {
return getWindow().findViewById(id);
}
Nullable
注释只是通知编译器可能会在此处获得引用null
,并且 Lint 会对此做出反应。它不知道如何区分findViewById(android.R.id.content)
使用findViewById(R.id.myCustomLayoutId)
. 但是,您可能可以自己添加 Lint 检查。
每当您findViewById(android.R.id.content)
在Activity
.
您可以安全地getView()
在 a 内使用,Fragment
无论何时onCreateView
被调用。
如果您不在 AppCompatActivity 中,则通过活动
public static void snackBar(Activity activity, String MESSAGE) {
Snackbar.make(activity.findViewById(android.R.id.content), MESSAGE, Snackbar.LENGTH_LONG).show();
}
如果您有上下文,可以尝试这样
public static void snackBar(Context context, String MESSAGE) {
Snackbar.make(((Activity)context).findViewById(android.R.id.content), MESSAGE, Snackbar.LENGTH_LONG).show();
}