2012-12-18 50 views
1

我有SeekBar在應用程序中按預期運行並返回我期望的值。但是,在Android 2.x上,它們顯示的很奇怪。SeekBar在Android 2.x上無法正常顯示

enter image description here

我看過其他類似的東西,如Android Drawable setLevel(); not filling SeekBar appropriately,但是這是一個自定義繪製。否則,我無法提出此問題的搜索條件以獲取任何地方。

在這種情況下,我做的是

SeekBar seekBar = (SeekBar)dialogLayout.findViewById(R.id.my_seek); 
seekBar.setProgress(5); 
seekBar.setMax(20); 

如果我移動滑塊,它恰當地填補了SeekBar它感動的時刻。

對發生了什麼有什麼想法?

+0

也許在seekbar上調用invalidate()一次? – eternalmatt

回答

2

發佈後,我意識到問題是方法調用的順序。

錯誤

SeekBar seekBar = (SeekBar)dialogLayout.findViewById(R.id.my_seek); 
seekBar.setProgress(5); 
seekBar.setMax(20); 

正確

SeekBar seekBar = (SeekBar)dialogLayout.findViewById(R.id.my_seek); 
seekBar.setMax(20); 
seekBar.setProgress(5); 

從我所收集,如果你第一次調用setProgress(5)在我的情況下,系統將設置可繪製顯示進度爲5%,因爲它是5/100和100是默認的最大值。

然後,如果您致電setMax(20),值5仍然有效,但drawable不再有效,並且不會重新計算爲顯示爲條的25%(5/20)。

SETMAX(20)首先將迫使被拉伸到正確一旦你使用setProgress(5)計算。

萬一它對任何人都有用,我在Android 2.1,2.2,4.1和4.2上測試了這個。

  • Android 2.1及2.2有這個bug,訂單事宜
  • 的Android 4.1和4.2沒有這個bug,順序並不重要

基本上保持向後兼容,始終做到setMax(int) first and then setProgress(int)

+1

我剛剛在Android 4.1.2上遇到了同樣的情況。這不僅僅是你看起來經歷的一些怪胎,而是規則。 – 2013-05-16 19:02:14