使用Progress
控件很方便,但是如果有居中需求的话,某些场景会增加一层布局嵌套
而且每个布局都要书写,很麻烦
而使用ProgressDialog
书写起来很方便,但是某些场景不能很直接的提供正确的上下文.(容器不是activity
或 fragment
时)
各位大哥在实际开发中如何实现进度条的需求的?
//我尝试这样操作的情况,下 在app第一次进入的时候,我点击按钮向容器上添加progressbar的时候,这个progressbar是不会旋转的,卡在界面上
//而关闭这个activity后(app中还有activity存在),再次进入activity 继续添加,这时候progressbar就会旋转了,这是为什么呢?
ProgressBar progressBar = new ProgressBar(this);
ViewGroup decorView = (ViewGroup) getWindow().getDecorView();
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER);
progressBar.setLayoutParams(layoutParams);
decorView.addView(progressBar);
这个我也提不出什么有建设性的意见,有时候为求省事,我会写一个ProgressBar的xml界面,使用时inflate并直接将其插入到rootView当中,愿意的话在BaseActivity中把这个逻辑再封装一层,这样的话基本能满足一些简单的需求。
再复杂一些的话就是让progressBar与用户的操作互动起来,比如说某个编辑界面有图片上传的入口,用户在选择图片后等待上传的这段时间我们就可以将提交键修改为Progress Widget,既阻止了用户的操作还能有效提示进度。
至于ProgressDialog,我觉得它阻塞性太强了,除了在某些强逻辑顺序的场景,例如必须加载某些文件才能进行下步操作的情况下,否则一般不推荐用这个。
以
Application
为例:写一个Activity, 作为Dialog弹出的代理
startActivity(Intent)
我其实对提问中“没有正确提供上下文”的场景是什么样的场景问题,更感兴趣。题主碰到了哪些
progressbar
可以拿到上下文而progressdialog
拿不到的场景?不是 activity 或者 fragment 的容器,那这个容器在被创造出来的时候肯定是在 activity 或者 fragment 中,
如果不在,那么他的父容器或者父父容器肯定在是在 activity 或者 fragment 中。
既然如此,那么你就可以通过构造方法一级一级往下传递上下文不就 O 了