NumberPicker
:slot_machine: The android library that provides a simple and customizable NumberPicker.
Top Related Projects
[NO LONGER MAINTAINED] Android library for better Picker DialogFragments
Quick Overview
NumberPicker is an Android library that provides a customizable number picker widget. It allows users to select a number from a predefined range, with options for customizing the appearance and behavior of the picker.
Pros
- Highly customizable, allowing for various styles and layouts
- Supports both integer and decimal number picking
- Easy to integrate into existing Android projects
- Provides smooth scrolling and fading effects
Cons
- Limited to Android platform only
- May require additional styling to match specific app designs
- Documentation could be more comprehensive
- Some reported issues with compatibility on older Android versions
Code Examples
- Basic usage:
val numberPicker = findViewById<NumberPicker>(R.id.number_picker)
numberPicker.minValue = 0
numberPicker.maxValue = 100
numberPicker.value = 50
- Customizing appearance:
numberPicker.textColor = Color.BLUE
numberPicker.textSize = 20f
numberPicker.dividerColor = Color.GRAY
numberPicker.dividerDistance = 60
- Setting a custom formatter:
numberPicker.setFormatter { value -> "$value°C" }
- Listening for value changes:
numberPicker.setOnValueChangedListener { picker, oldVal, newVal ->
Log.d("NumberPicker", "Value changed from $oldVal to $newVal")
}
Getting Started
- Add the JitPack repository to your project's
build.gradle
:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
- Add the dependency to your app's
build.gradle
:
dependencies {
implementation 'com.github.ShawnLin013:NumberPicker:2.4.13'
}
- Add the NumberPicker to your layout XML:
<com.shawnlin.numberpicker.NumberPicker
android:id="@+id/number_picker"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
- Initialize and use the NumberPicker in your Activity or Fragment:
val numberPicker = findViewById<NumberPicker>(R.id.number_picker)
numberPicker.minValue = 0
numberPicker.maxValue = 100
numberPicker.value = 50
Competitor Comparisons
[NO LONGER MAINTAINED] Android library for better Picker DialogFragments
Pros of android-betterpickers
- Offers a wider variety of picker types (date, time, number, recurrence, etc.)
- Provides a more customizable and modern UI design
- Includes additional features like calendar view for date picking
Cons of android-betterpickers
- Larger library size due to more features, potentially increasing app size
- May have a steeper learning curve due to more complex implementation
- Less frequently updated compared to NumberPicker
Code Comparison
NumberPicker implementation:
val numberPicker = NumberPicker(context)
numberPicker.minValue = 0
numberPicker.maxValue = 100
numberPicker.value = 50
android-betterpickers implementation:
val numberPickerBuilder = NumberPickerBuilder()
.setFragmentManager(supportFragmentManager)
.setStyleResId(R.style.BetterPickersDialogFragment)
.setMinNumber(BigDecimal(0))
.setMaxNumber(BigDecimal(100))
.setCurrentNumber(BigDecimal(50))
numberPickerBuilder.show()
Both libraries provide number picking functionality, but android-betterpickers offers a dialog-based approach with more styling options, while NumberPicker is a simpler, view-based implementation.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Number Picker
The android library that provides a simple and customizable NumberPicker. It's based on android.widget.NumberPicker.
Features
- Customizable fonts(color, size, strikethrough, underline, typeface)
- Customizable dividers(color, distance, length, thickness, type)
- Horizontal and Vertical mode are both supported
- Ascending and Descending order are both supported
- Also supports negative values and multiple lines
Usage
Java
NumberPicker numberPicker = (NumberPicker) findViewById(R.id.number_picker);
// Set divider color
numberPicker.setDividerColor(ContextCompat.getColor(this, R.color.colorPrimary));
numberPicker.setDividerColorResource(R.color.colorPrimary);
// Set formatter
numberPicker.setFormatter(getString(R.string.number_picker_formatter));
numberPicker.setFormatter(R.string.number_picker_formatter);
// Set selected text color
numberPicker.setSelectedTextColor(ContextCompat.getColor(this, R.color.colorPrimary));
numberPicker.setSelectedTextColorResource(R.color.colorPrimary);
// Set selected text size
numberPicker.setSelectedTextSize(getResources().getDimension(R.dimen.selected_text_size));
numberPicker.setSelectedTextSize(R.dimen.selected_text_size);
// Set selected typeface
numberPicker.setSelectedTypeface(Typeface.create(getString(R.string.roboto_light), Typeface.NORMAL));
numberPicker.setSelectedTypeface(getString(R.string.roboto_light), Typeface.NORMAL);
numberPicker.setSelectedTypeface(getString(R.string.roboto_light));
numberPicker.setSelectedTypeface(R.string.roboto_light, Typeface.NORMAL);
numberPicker.setSelectedTypeface(R.string.roboto_light);
// Set text color
numberPicker.setTextColor(ContextCompat.getColor(this, R.color.dark_grey));
numberPicker.setTextColorResource(R.color.dark_grey);
// Set text size
numberPicker.setTextSize(getResources().getDimension(R.dimen.text_size));
numberPicker.setTextSize(R.dimen.text_size);
// Set typeface
numberPicker.setTypeface(Typeface.create(getString(R.string.roboto_light), Typeface.NORMAL));
numberPicker.setTypeface(getString(R.string.roboto_light), Typeface.NORMAL);
numberPicker.setTypeface(getString(R.string.roboto_light));
numberPicker.setTypeface(R.string.roboto_light, Typeface.NORMAL);
numberPicker.setTypeface(R.string.roboto_light);
// Set value
numberPicker.setMaxValue(59);
numberPicker.setMinValue(0);
numberPicker.setValue(3);
// Using string values
// IMPORTANT! setMinValue to 1 and call setDisplayedValues after setMinValue and setMaxValue
String[] data = {"A", "B", "C", "D", "E", "F", "G", "H", "I"};
numberPicker.setMinValue(1);
numberPicker.setMaxValue(data.length);
numberPicker.setDisplayedValues(data);
numberPicker.setValue(7);
// Set fading edge enabled
numberPicker.setFadingEdgeEnabled(true);
// Set scroller enabled
numberPicker.setScrollerEnabled(true);
// Set wrap selector wheel
numberPicker.setWrapSelectorWheel(true);
// Set accessibility description enabled
numberPicker.setAccessibilityDescriptionEnabled(true);
// OnClickListener
numberPicker.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d(TAG, "Click on current value");
}
});
// OnValueChangeListener
numberPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
Log.d(TAG, String.format(Locale.US, "oldVal: %d, newVal: %d", oldVal, newVal));
}
});
// OnScrollListener
numberPicker.setOnScrollListener(new NumberPicker.OnScrollListener() {
@Override
public void onScrollStateChange(NumberPicker picker, int scrollState) {
if (scrollState == SCROLL_STATE_IDLE) {
Log.d(TAG, String.format(Locale.US, "newVal: %d", picker.getValue()));
}
}
});
XML
add xmlns:app="http://schemas.android.com/apk/res-auto"
<com.shawnlin.numberpicker.NumberPicker
android:id="@+id/number_picker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
app:np_width="64dp"
app:np_height="180dp"
app:np_dividerColor="@color/colorPrimary"
app:np_formatter="@string/number_picker_formatter"
app:np_max="59"
app:np_min="0"
app:np_selectedTextColor="@color/colorPrimary"
app:np_selectedTextSize="@dimen/selected_text_size"
app:np_textColor="@color/colorPrimary"
app:np_textSize="@dimen/text_size"
app:np_typeface="@string/roboto_light"
app:np_value="3" />
Attributes
attribute name | attribute description | default |
---|---|---|
np_width | The width of this widget. | |
np_height | The height of this widget. | |
np_accessibilityDescriptionEnabled | Flag whether the accessibility description enabled. | enabled |
np_dividerColor | The color of the selection divider. | |
np_dividerDistance | The distance between the two selection dividers. | |
np_dividerLength | The length of the selection divider. | |
np_dividerThickness | The thickness of the selection divider. | |
np_dividerType | The type of the selection divider. | side_lines |
np_fadingEdgeEnabled | Flag whether the fading edge should enabled. | |
np_fadingEdgeStrength | The strength of fading edge while drawing the selector. | |
np_formatter | The formatter of the numbers. | |
np_hideWheelUntilFocused | Flag whether the selector wheel should hidden until the picker has focus. | |
np_itemSpacing | Amount of space between items. | |
np_lineSpacingMultiplier | The line spacing multiplier for the multiple lines. | |
np_max | The max value of this widget. | |
np_maxFlingVelocityCoefficient | The coefficient to adjust (divide) the max fling velocity. | |
np_min | The min value of this widget. | |
np_order | The order of this widget. | ascending |
np_orientation | The orientation of this widget. | vertical |
np_scrollerEnabled | Flag whether the scroller should enabled. | |
np_selectedTextAlign | The text align of the selected number. | center |
np_selectedTextColor | The text color of the selected number. | |
np_selectedTextSize | The text size of the selected number. | |
np_selectedTextStrikeThru | Flag whether the selected text should strikethroughed. | |
np_selectedTextUnderline | Flag whether the selected text should underlined. | |
np_selectedTypeface | The typeface of the selected numbers. | |
np_textAlign | The text align of the numbers. | center |
np_textColor | The text color of the numbers. | |
np_textSize | The text size of the numbers. | |
np_textStrikeThru | Flag whether the text should strikethroughed. | |
np_textUnderline | Flag whether the text should underlined. | |
np_typeface | The typeface of the numbers. | |
np_value | The current value of this widget. | |
np_wheelItemCount | The number of items show in the selector wheel. | |
np_wrapSelectorWheel | Flag whether the selector should wrap around. |
Gradle
Add the dependency in your build.gradle
buildscript {
repositories {
mavenCentral()
}
}
dependencies {
implementation 'io.github.ShawnLin013:number-picker:2.4.13'
}
Support
Thank you to all our backers! ð
License
The source code is licensed under the MIT license.
Top Related Projects
[NO LONGER MAINTAINED] Android library for better Picker DialogFragments
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot