我希望我的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();
}
}
不知道你这个问题是否已经解决, 如果还没有解决的话:它需要配合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所展示的内容。
在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);
// 设置SnackBarView的padding都为0,避免出现黑色边框背景的情况
snackbar.getView().setPadding(0, 0, 0, 0);
// 将SnackBarView的背景颜色设置为透明,避免在自定义布局中有圆角或者自适应宽度的时候显示一块黑色背景的情况
snackbar.getView().setBackgroundColor(Color.TRANSPARENT);
// 获取到SnackBar.getView获取的SnackBar的view
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添加到SnackBarView中
snackbarLayout.addView(customView);
snackbar.show();
其中,自定义布局的布局文件为 custom_snackbar.xml
,包含一个TextView控件用于显示需要提示的文本,具体的布局根据实际需要进行设计即可。在自定义布局中,也可以像参考资料中示例一样添加点击事件等操作,以满足各种需求。