使用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);
天蓬老师2017-04-18 09:18:17
這個我也提不出什麼有建設性的意見,有時候為求省事,我會寫一個ProgressBar的xml界面,使用時inflate並直接將其插入到rootView當中,願意的話在BaseActivity中把這個邏輯再封裝一層,這樣的話基本上可以滿足一些簡單的需求。
再複雜一點的話就是讓progressBar與用戶的操作互動起來,比如說某個編輯介面有圖片上傳的入口,用戶在選擇圖片後等待上傳的這段時間我們就可以將提交鍵修改為Progress Widget,既封鎖了使用者的操作還能有效提示進度。
至於ProgressDialog,我覺得它阻塞性太強了,除了在某些強邏輯順序的場景,例如必須加載某些文件才能進行下步操作的情況下,否則一般不推薦用這個。
PHP中文网2017-04-18 09:18:17
只要能取得到
Context
, 那就接着用ProgressDialog
吧
以Application
為例:
寫一個Activity, 作為Dialog彈出的代理
startActivity(Intent)
天蓬老师2017-04-18 09:18:17
我其實對提問中「沒有正確提供上下文」的場景是什麼樣的場景問題,更感興趣。題主碰到了哪些progressbar
可以拿到上下文而progressdialog
拿不到的場景?
巴扎黑2017-04-18 09:18:17
不是 activity 或 fragment 的容器,那麼這個容器在被創造出來的時候肯定是在 activity 或者 fragment 中,
如果不在,那麼他的父容器或者父父容器肯定在是在 activity 或者 fragment 中。
既然如此,那麼你就可以用構造法一級一級往下傳遞上下文不就 O 了