Android 全局弹窗及点击响应操作
2018-01-31 11:49
218 查看
在某些场景下,比如说当我们的应用返回到后台时,等用户再次回到应用,要弹出一个框,作为提示,或者还有一些供用户操作的按钮。
功能可能比较简单,纯属做个记录,实现方式多样,下面就说说
1.涉及到的页面都继承一个BaseActivity,差不多所有的逻辑都在这个base里面来写了。
2.这里还需要知道所有的页面此时都不可见。系统自带了这种方法。写一个类直接实现系统方法:Application.ActivityLifecycleCallbacks
1)public class ActivityLifecycleController implements Application.ActivityLifecycleCallbacks {
}
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方法中,但平时的使用中我并没有采用,大多情况下弹窗都会有些圆角背景,若是用了这个方法没有效果。若有大神知道还请告知一二。
功能可能比较简单,纯属做个记录,实现方式多样,下面就说说
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方法中,但平时的使用中我并没有采用,大多情况下弹窗都会有些圆角背景,若是用了这个方法没有效果。若有大神知道还请告知一二。
相关文章推荐
- webView文件上传取消弹窗后再次点击不响应点击事件问题
- Android中Spinner控件关于二次点击同一item无响应事件解析及处理方法
- Android中上下左右键的按下和弹起响应操作
- Android---AlarmManager(全局定时器/闹钟)指定时长或以周期形式执行某项操作
- Android---AlarmManager(全局定时器/闹钟)指定时长或以周期形式执行某项操作
- Android中ListView的item不能响应点击事件的原因
- Android ImageView图片透明区域不响应点击事件,不规则图片透明区域响应点击事件
- android 自定义listview无法响应点击事件OnItemClickListener
- Android WebView页面中点击H5页面没有响应问题。
- android WebView拦截js弹窗界面无响应问题
- android edittext 点击回车会响应两次的解决方案
- Android---AlarmManager(全局定时器/闹钟)指定时长或以周期形式执行某项操作
- android webview js交互, 响应webview中的图片点击事件
- Android-屏蔽掉Layout里面子元素,由Layout来响应点击事件
- Android之AlarmManager(全局定时器/闹钟)指定时长或以周期形式执行某项操作
- android控件两次点击才响应的另一个原因
- Android WebView JS交互之响应WebView中的图片点击事件
- android 防止多次点击,导致事件监听响应到其他界面
- android各种点击事件不响应
- Android EditText点击两次才能响应,解决办法