因此,三星与AOSP略有不同。类的代码有一些额外的逻辑,包括NumberPicker
ChangeCurrentByOneFromLongPressCommand
if (!mIsDeviceDefault) {
// ...
} else if (mDecrementButton.isShown() || mIncrementButton.isShown()) {
// ...
- 当您使用其中一个主题(这是启动Android 4.x的应用程序的默认主题)时,where
mIsDeviceDefault
true
Theme.DeviceDefault
- where 和 are if 是 ,如果由其样式指定的布局资源 ID 是
mDecrementButton
mIncrementButton
null
mHasSelectorWheel
true
NumberPicker
-
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解包器提取框架文件,反编译并使用Universal Deodexer V5,探索了包括使用JADX在内的结果。framework.jar
framework2.jar
framework-res.apk
如何修复
构造后,使用反射来检查 和 是否为空。如果它们使用反射将它们分别设置为 .NumberPicker
ImageButton mDecrementButton
ImageButton mIncrementButton
new ImageButton(numberPicker.getContext())
仅当在其中一个受影响的设备上运行时才应用此逻辑(检查常量)。Build