我在应用程序中有SeekBar
个按预期运行并返回我期望的值。但是,在Android 2.x上,它们显示得很奇怪。
我已经找到了其他类似的东西,例如Android Drawable setLevel(); not filling SeekBar appropriately,但那是一个自定义的drawable。否则,我无法想出这个问题的搜索条件,无处可去。
在这种情况下,我所做的只是
SeekBar seekBar = (SeekBar)dialogLayout.findViewById(R.id.my_seek);
seekBar.setProgress(5);
seekBar.setMax(20);
如果我移动滑块,它会在移动时正确填充SeekBar
。
关于发生了什么的任何想法?
答案 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上进行了测试。
基本上要保持向后兼容,首先要先执行 setMax(int),然后再执行 setProgress(int)。