2016-10-12 58 views
0

我正在開發Android TV應用程序,需要製作進度條以指示已播放了多少內容。我覺得我寫的應該是有效的,但事實並非如此。即使在佈局完成後,View.setLayoutParams()也沒有效果

我有一個LinearLayoutandroid: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,並且屏幕上也沒有變化。我錯過了什麼明顯微不足道的東西?

+1

您是否瞭解'ProgressBar'視圖? – pskink

+0

@pskink我沒有。我會看看,也許停止嘗試重新發明輪子,謝謝! – kjerins

+1

是'重新發明輪子'總是不好的... – pskink

回答

0

嘗試在設置佈局參數後調用progressView.requestLayout()

相關問題