android制定统一的ProgressBar以及统一的提示页面
来源:互联网 发布:知乎 十号胖狐狸 编辑:程序博客网 时间:2024/05/01 00:17
有的时候我们需要一个统一的ProgressBar
我的做法很简单,activity最底层的view是一个名叫DecorView的LinearLayout,它包含了title和content,其中content是一个FrameLayout,它的id是android:id=”@android:id/content”。
那么我们就可以在任意activity,添加一个加载ProgressBar的View到这个FrameLayout上面来实现效果
layout:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/cover_root" android:layout_width="match_parent" android:background="#0000" android:layout_height="match_parent"> <RelativeLayout android:id="@+id/cover" android:layout_marginTop="48dp" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white_transparent" /> <ProgressBar style="@android:style/Widget.Holo.ProgressBar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true"/></RelativeLayout>
代码:
/** * 显示加载圈 * @param activity * @param isCover 是否需要遮罩 防止点击 */ public static void showLoading(BaseActivity activity , boolean isCover){ if (isLoading(activity)){ return; } FrameLayout root = activity.getWindow().getDecorView().findViewById(android.R.id.content); if (root != null){ View loadingView = LayoutInflater.from(activity).inflate(R.layout.lyt_loading, null); if (isCover) { //遮罩层设置点击事件,拦截底层视图的点击事件 loadingView.findViewById(R.id.cover).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); } loadingView.findViewById(R.id.cover).setVisibility(isCover ? View.VISIBLE : View.GONE); root.removeView(loadingView); root.addView(loadingView); } }
这样就可以了。
扩展
最近工作中还做了一个需求,做一个统一的无网络提示页面,那么我第一时间想到的也是这种方式。
/** * 展示统一无网络页面 * @param activity */ public static void showNetworklessView(final BaseActivity activity){ activity.hideLoading(); FrameLayout root = activity.getWindow().getDecorView().findViewById(android.R.id.content); View noNetView = LayoutInflater.from(activity).inflate(R.layout.lyt_no_network, null); //覆盖上层view的点击事件 noNetView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); //重试按钮的点击事件 noNetView.findViewById(R.id.tv_retry).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (isNetworkAvailable(activity)){ Intent intent = new Intent(activity,activity.getClass()); intent.putExtras(activity.getIntent()); activity.startActivity(intent); activity.overridePendingTransition(0,0); activity.finish(); } else { Toast.makeText(activity,"当前网络不可用,请检查网络设置",Toast.LENGTH_SHORT).show(); } } }); root.removeView(noNetView); root.addView(noNetView); Toast.makeText(activity,"当前网络不可用,请检查网络设置",Toast.LENGTH_SHORT).show(); }
由于项目的封装性不是很好,没有一个封装的入口进行重新加载,所以我的做法是重新startActivity,并且overridePendingTransition(0,0)来消除视觉上的重新打开过程。
我的源代码:
https://github.com/runcow/LoadingDemo
阅读全文
0 0
- android制定统一的ProgressBar以及统一的提示页面
- Android统一界面的实现
- 修改DVbbs8.x的页面统一宽度
- 页面制作统一的 头 底
- 统一页面中控件的样式
- 统一设置前台页面的基础路径
- javaJSP实现页面的统一编码
- 统一整合页面的click事件
- 主题-统一Android应用风格的机制
- 在iOS / Android的统一字体问题
- uml 统一的意义
- 统一的处理异常
- 潜移默化的统一
- 验证框架的统一
- 统一的命名
- 统一存储的进化
- 异常的统一处理
- 荀子的统一论
- js验证失败后阻止提交
- 关于opencv在代码正确的情况下,无法显示图像的问题。
- RecyclerView设置addItemDecoration在Fragment中不显示
- JavaScript之闭包
- andriod——Retrofit+Fresco+MVP接口拼接传值
- android制定统一的ProgressBar以及统一的提示页面
- [Heoi2013]Segment
- 一些有用的链接地址_20171206
- 清澄A1023. 瓷砖铺放
- 25G Switch Vs. 40G Switch: How to Choose?
- 解决:perhaps the designated entry point is not set?
- 医联体项目开发方案
- 自己封装了些FastJson中格式转换的Util
- Spark特征处理之RFormula源码解析