我正在開發Android TV應用程序,需要製作進度條以指示已播放了多少內容。我覺得我寫的應該是有效的,但事實並非如此。即使在佈局完成後,View.setLayoutParams()也沒有效果
我有一個LinearLayout
與android:orientation="horizontal"
和android:weightSum=100
作爲進度條的容器,和實際的進度條是容器內的FrameLayout
,與android:layout_width="0dp"
和android:layout_weight="0"
確保進度條是不是如果有畫沒有任何進展。
在活動代碼我試圖改變進度條這樣的重量:
ViewGroup.LayoutParams lp = progressView.getLayoutParams();
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(lp.width, lp.height, progress);
progressView.setLayoutParams(params);
(progressView
,自然是我試圖操縱進度條對象,progress
是預期的新重量)
我最初在活動的onCreate()
方法中運行此代碼,直到我記得在視圖的尺寸正確佈置之前您無法對視圖的任何尺寸執行任何操作。從那時起,我已經試過在onResume()
運行此與postDelayed
這樣的:
@Override
public void onResume() {
super.onResume();
progressView.postDelayed(new Runnable() {
@Override
public void run() {
setProgress();
}
}, 1000);
}
,並用ViewTreeObserver
這樣的過程中onCreate()
:
progressView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (!progressBarRefreshed) {
setProgress();
}
}
});
,我甚至已經嘗試運行的代碼作爲一個onClick事件附加到同一活動中的按鈕(在這兩種情況下,setProgress()
都是使用上述代碼執行重量更改的功能)。我已驗證(使用從代碼中刪除的日誌消息使其更易讀),初始寬度爲0,高度爲-1(match_parent
),權重爲0,並且新的LayoutParams
對象的寬度爲0,height - 1和重量等於我設定的任何值。但在調用setLayoutParams()
之後,視圖仍然具有權重0,並且屏幕上也沒有變化。我錯過了什麼明顯微不足道的東西?
您是否瞭解'ProgressBar'視圖? – pskink
@pskink我沒有。我會看看,也許停止嘗試重新發明輪子,謝謝! – kjerins
是'重新發明輪子'總是不好的... – pskink