SeekBar在Android 2.x上无法正确显示

时间:2012-12-18 03:57:11

标签: android

我在应用程序中有SeekBar个按预期运行并返回我期望的值。但是,在Android 2.x上,它们显示得很奇怪。

enter image description here

我已经找到了其他类似的东西,例如Android Drawable setLevel(); not filling SeekBar appropriately,但那是一个自定义的drawable。否则,我无法想出这个问题的搜索条件,无处可去。

在这种情况下,我所做的只是

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

如果我移动滑块,它会在移动时正确填充SeekBar

关于发生了什么的任何想法?

1 个答案:

答案 0 :(得分: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),系统会将drawable设置为5%,因为它是5/100而100是默认值最大。

然后,如果您调用 setMax(20),则值5仍然有效,但drawable不再有效,并且不会重新计算显示为条形的25%(5/20)

首先执行 setMax(20)会在使用 setProgress(5)后强制正确计算drawable。

如果它对任何人都有用,我在Android 2.1,2.2,4.1和4.2上进行了测试。

  • Android 2.1和2.2有这个错误,顺序很重要
  • Android 4.1和4.2没有这个bug,顺序无关紧要

基本上要保持向后兼容,首先要先执行 setMax(int),然后再执行 setProgress(int)