关于spinner水平偏移问题解决

本文探讨了在项目中遇到的Spinner Dropdown Popup偏移问题,通过调试和源码分析,发现实际使用的组件为AppCompatSpinner,并揭示了setDropDownHorizontalOffset方法失效的原因。最终通过设置paddingLeft属性成功调整了Dropdown的位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目中用到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版本有关系或是我使用问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值