1

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

在此处输入图像描述

我一直在寻找其他类似的东西,例如Android Drawable setLevel(); 没有适当地填充 SeekBar,但那是用于自定义可绘制对象。否则,我很难想出这个问题的搜索词来到达任何地方。

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

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

如果我移动滑块,它会在移动SeekBar的那一刻正确填充。

知道发生了什么吗?

4

1 回答 1

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 的值仍然有效,但可绘制对象不再有效,并且不会重新计算以显示为条形的 25% (5 / 20)。

一旦使用setProgress(5) ,首先执行setMax(20)将强制正确计算可绘制对象。

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

  • Android 2.1 和 2.2 有这个 bug,顺序很重要
  • Android 4.1和4.2没有这个bug,顺序无所谓

基本上为了保持向后兼容,总是先做setMax(int)然后setProgress(int)

于 2012-12-18T04:21:30.863 回答