8000 GitHub - oOJohn6Oo/JWheelPicker: iOS style data picker using JetPack Compose
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

oOJohn6Oo/JWheelPicker

Repository files navigation

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


Implementation

  • latest version LatestVersion
  • add implementation("io.github.oojohn6oo:jwheelpicker:<version>")

Summary

JSinglePickerDialogFragment JMultiplePickerDialogFragment
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,
contain 8000 erHorizontalPaddingInDp = 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.

About

iOS style data picker using JetPack Compose

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages

0