所以三星NumberPicker
与AOSP略有不同。类的代码ChangeCurrentByOneFromLongPressCommand
有一些额外的逻辑,包括
if (!mIsDeviceDefault) {
// ...
} else if (mDecrementButton.isShown() || mIncrementButton.isShown()) {
// ...
- 当您使用其中一个主题
mIsDeviceDefault
时在哪里(这是启动 Android 4.x 的应用程序的默认主题)true
Theme.DeviceDefault
- where
mDecrementButton
和mIncrementButton
are null
if mHasSelectorWheel
is true
,如果NumberPicker
由其样式指定的布局资源 ID 是其中之一,
则会发生这种情况
DEFAULT_LAYOUT_RESOURCE_ID
/@layout/number_picker
TOUCHWIZ_DARK_LAYOUT_RESOURCE_ID
/@layout/tw_number_picker_dark
TOUCHWIZ_LIGHT_LAYOUT_RESOURCE_ID
/@layout/tw_number_picker_light
这表明这将一直发生。
以下是所有可能的样式:
<style name="Widget.NumberPicker">
<item name="orientation">1</item>
<item name="fadingEdge">2000</item>
<item name="fadingEdgeLength">50dp</item>
<item name="internalLayout">@layout/number_picker</item>
</style>
<style name="Widget.Holo.NumberPicker">
<item name="solidColor">@color/transparent</item>
<item name="internalLayout">@layout/number_picker_with_selector_wheel</item>
<item name="selectionDivider">@drawable/numberpicker_selection_divider</item>
<item name="selectionDividerHeight">2dp</item>
<item name="selectionDividersDistance">48dp</item>
<item name="internalMaxHeight">180dp</item>
<item name="internalMinWidth">64dp</item>
<item name="virtualButtonPressedDrawable">?attr/selectableItemBackground</item>
</style>
<style name="Widget.DeviceDefault.NumberPicker">
<item name="internalLayout">@layout/tw_number_picker_dark</item>
</style>
<style name="Widget.DeviceDefault.Light.NumberPicker">
<item name="internalLayout">@layout/tw_number_picker_light</item>
</style>
来源:为三星 Galaxy S3 下载 Android 4.3 固件,使用ext4 unpacker 提取框架文件,反编译framework.jar
并framework2.jar
使用Universal Deodexer V5,探索结果包括framework-res.apk
使用JADX。
怎么修
构建后NumberPicker
使用反射检查是否ImageButton mDecrementButton
为ImageButton mIncrementButton
空。如果它们使用反射将它们每个设置为new ImageButton(numberPicker.getContext())
.
仅在受影响的设备之一上运行时应用此逻辑(检查Build
常量)。