项目中用到spinner,要求spinner下DropdownPopup距离spinner位置向左偏移一段较长距离,根据spinner原有方法setDropDownHorizontalOffset(int)本应该正常解决,可是现实中却出现问题。经过调试断点和查看源码,找出了一些原因,但又不是十分明白。
AppCompatSpinner
首先 当尝试打断点时,会发现虽然项目中用的是Spinner,在AS中点击查看源码也是android.widget包下的spinner,但其实项目执行的是AppCompatSpinner,所以应查看的是AppCompatSpinner的源码(API16以上)。(项目API25)
查看时发现其内部类DropdownPopup在每次show()时都会调用computeContentWidth(),而此方法内变量hOffset并不是之前setDropDownHorizontalOffset(int)的值,而是一个测量和偏移值,所以set方法并没有起到作用(?)。
最后,因为hOffset和spinnerPaddingLeft有关,所以在spinner中设置了 android:paddingLeft=”-440px” 发现真的起作用了。
所以,这个问题暂时被解决了,但是相关问题还有待继续摸索,感觉似乎是和v7版本有关系或是我使用问题。