Android 全局弹窗及点击响应操作

在某些场景下,比如说当我们的应用返回到后台时,等用户再次回到应用,要弹出一个框,作为提示,或者还有一些供用户操作的按钮。
功能可能比较简单,纯属做个记录,实现方式多样,下面就说说
1.涉及到的页面都继承一个BaseActivity,差不多所有的逻辑都在这个base里面来写了。

2.这里还需要知道所有的页面此时都不可见。系统自带了这种方法。写一个类直接实现系统方法:Application.ActivityLifecycleCallbacks
1)public class ActivityLifecycleController implements Application.ActivityLifecycleCallbacks {

private static boolean isAppInForeground;
private static int started;
public ActivityLifecycleController() {
    started = 0;
}
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {

}

@Override
public void onActivityStarted(Activity activity) {     
    ++started;
}

@Override
public void onActivityResumed(Activity activity) {

}

@Override
public void onActivityPaused(Activity activity) {
}

@Override
public void onActivityStopped(Activity activity) {
    --started;
}

@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {

}

@Override
public void onActivityDestroyed(Activity activity) {

}
//可见的数量
public static int getStartedCount(){
    return started;
}

}

2)一般都会有自己的一个BaseApplication,继承系统的Application。在onCreate方法中来初始化前面的生命周期控制类:registerActivityLifecycleCallbacks(new ActivityLifecycleController());

3.准备工作完成,用户返回后台的操作有可能是通过Home键或者菜单键,此时通过在onStop方法中来调用上面控制类的方法:
int startActivityCount = ActivityLifecycleController.getStartedCount();
当数量为0时,所有的页面都走了stop,说明此时应用已返回到了后台。这里可以设置一个值来记住,在onResume方法中,通过判断此值,你可以选择弹窗或吐司。

4.说到弹窗,现在也不建议用popwindow或者去继承dialog。推荐使用DialogFragment,它具有更高的可复用性(降低耦合)和更好的便利性(很好的处理屏幕翻转的情况)。例如旋屏,基于DialogFragment的对话框将会由FragmentManager自动重建,然而基于Dialog实现的对话框则没有这样的能力。
》》这里写个比较通用的方法
//新建
public static void newsInstance(FragmentManager fm) {
FragmentTransaction fragmentTransaction = fm.beginTransaction();
Fragment fragment = fm.findFragmentByTag(“TestDialog”);
if (null != fragment) {
fragmentTransaction.remove(fragment);
}
TestDialog testDialog= new TestDialog();
myDialogFragment.show(fragmentTransaction, “TestDialog”);
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
View view=LayoutInflater.from(getActivity()).inflate(R.layout.fragment_dialog_study_record_rule, container,false);
return view;
}
这里可以说下有人创建可能不是这种方法,而是在onCreateDialog方法中,但平时的使用中我并没有采用,大多情况下弹窗都会有些圆角背景,若是用了这个方法没有效果。若有大神知道还请告知一二。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值