您的位置:首页 > 移动开发 > Android开发

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

2018-01-31 11:49 218 查看
在某些场景下,比如说当我们的应用返回到后台时,等用户再次回到应用,要弹出一个框,作为提示,或者还有一些供用户操作的按钮。

功能可能比较简单,纯属做个记录,实现方式多样,下面就说说

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方法中,但平时的使用中我并没有采用,大多情况下弹窗都会有些圆角背景,若是用了这个方法没有效果。若有大神知道还请告知一二。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: