JWheelPicker - iOS-style wheel picker supports Android 5.0 and above.
Haptic feedback | 3D wheel | Preset Dialog | Dark Mode | Custom support
Download Demo APK from latest release
latest version
add implementation("io.github.oojohn6oo:jwheelpicker:<version>")
Usage
1️⃣For Default BottomSheet Dialog Use
private fun showSinglePicker (withAdapter : Boolean = false) {
if (withAdapter) {
JSinglePickerDialogFragment .show(
supportFragmentManager,
requiredData = JSinglePickerDialogAdapterData (
title = 0 to " SingleAdapterPicker" ,
overlayStyle = JWheelPickerHelper .OVERLAY_STYLE_RECTANGLE ,
selectTextColor = { MaterialTheme .colors.primary },
isDraggable = false ,
adapterClass = TestMultipleJPickerAdapter ::class .java,
adapterParamsAsBundle = Bundle ().apply {
putInt(" wheelCount" , 1 )
putIntArray(" initialIndexes" , intArrayOf(9 ))
},
),
)
} else {
JSinglePickerDialogFragment .show(
supportFragmentManager,
requiredData = JSinglePickerDialogData (
title = 0 to " SinglePicker" ,
selectTextColor = { MaterialTheme .colors.primary },
isDraggable = false ,
initialIndex = 20 ,
dataList = (0 .. 30 ).map { JWheelPickerItemInfo (it.toString(), it, " item$it " ) },
overlayStyle = JWheelPickerHelper .OVERLAY_STYLE_RECTANGLE
),
)
}
}
private fun showMultiplePicker () {
JMultiplePickerDialogFragment .show(
supportFragmentManager,
requiredData = JMultiPickerDialogData (
title = 0 to " MultiplePicker" ,
overlayStyle = JWheelPickerHelper .OVERLAY_STYLE_LINE ,
adapterClass = TestMultipleJPickerAdapter ::class .java,
selectTextColor = { MaterialTheme .colors.primary },
),
)
}
private fun showDatePicker () {
if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .O ) {
JDateWheelPickerDialogFragment .show(
supportFragmentManager,
requiredData = JDatePickerDialogData (
title = 0 to " DatePicker" ,
overlayStyle = JWheelPickerHelper .OVERLAY_STYLE_RECTANGLE ,
containerHorizontalPaddingInDp = 16 ,
selectTextColor = { MaterialTheme .colors.primary },
),
)
} else {
Toast .makeText(
this ,
" need Build.VERSION.SDK_INT >= Build.VERSION_CODES.O" ,
Toast .LENGTH_SHORT
).show()
}
}
And using FragmentResult API to get the callback
supportFragmentManager.setFragmentResultListener(JSinglePickerDialogFragment .TAG , this ) { tag, bundle ->
val isDismiss = bundle.getBoolean(" dismiss" , false )
if (isDismiss){
return @setFragmentResultListener
}
val result = bundle.getParcelableCompat(fragmentResultKey, JWheelPickerItemInfo ::class .java)
Toast .makeText(this , result?.id.toString(), Toast .LENGTH_SHORT ).show()
}
2️⃣For Any Compose View Use
JWheelPicker (
modifier = modifier,
onSelectedItemChanged = onSelectedItemChanged,
textStyle = TextStyle (color = MaterialTheme .colors.onBackground, fontSize = 20 .sp),
selectedTextColor = requiredData.selectTextColor(),
drawOverLay = rememberDefaultOverlayStyle(requiredData.overlayStyle),
initialIndex = requiredData.getSafeInitialIndex(),
itemCount = requiredData.dataList.size,
itemData = { index ->
requiredData.dataList[index]
},
)
JMultiWheelPicker (
modifier = modifier,
wheelCount = adapter.wheelCount,
generateJWheelPickerInfo = generateJWheelPickerInfo,
drawOverLay = rememberDefaultOverlayStyle(requiredData.overlayStyle),
key = key,
onSelectedItemChanged = onSelectedItemChanged,
selectedTextColor = requiredData.selectTextColor(),
)
JDateWheelPicker (
modifier = modifier,
datePickerMode = requiredData.datePickerMode,
timePickerMode = requiredData.timePickerMode,
containerHorizontalPadding = requiredData.containerHorizontalPaddingInDp.dp,
startLocalDateTime = requiredData.startLocalDateTime,
endLocalDateTime = requiredData.endLocalDateTime,
initialSelectDateTime = requiredData.initialSelectDateTime,
drawOverLay = rememberDefaultOverlayStyle(requiredData.overlayStyle),
onSelectedTimeChanged = onSelectedTimeChanged,
selectedTextColor = requiredData.selectTextColor(),
)
Common Q&A
How can I customize the header of Picker Dialog
Just override the ColumnScope.DefaultPickerHeader function, like CustomTitleSinglePickerDialogFragment .
How to disable the swipe-to-dismiss feature of the preset Picker Dialog?
When passing data like JDatePickerDialogData , set the isDraggable to false.