carbs0126 / numberpickerview Goto Github PK
View Code? Open in Web Editor NEWanother NumberPicker with more flexible attributes on Android platform
another NumberPicker with more flexible attributes on Android platform
能水平方向吗,就行嘀嗒拼车的感谢费那种,我在做成AlertDialog.Builder的setView里设置您的NumberPickerView,非常希望能横着滑动。
能不能设置选中的背景颜色
假如我设置了一个时间 退出下次再进来选中的是我设置的那个时间可以实现吗?
I'm trying to disable NumberPickerView when a certain condition is met. For this, I used NumberPickerView#setEnabled(false);
, but I got no change in behaviour: the view is still scrollable. Is there a way to really disable the NumberPickerView?
Thanks again for such a great library. You got any idea how I can fade/alpha top and bottom of view. So just like native number picker but I want to be able to increase/decrease that fade.
Trying / playing with mPaintText right now. Not sure if this would do or I may need to create another paint object. Let me know if you got any idea. :)
OnValueChangeListener中的onValueChange方法每次都要在选中后间隔1秒左右才能响应,OnValueChangeListenerInScrolling的onValueChangeInScrolling方法及时响应了,但是只记录选中值的上一个值,因此两个监听都无法很好的及时确定选中的值,请问有什么方法可以解决吗?
Enhancement:
I am trying to find a way to set default value.
use case :-
Current time is 3:06. When user go to specific screen, dev can take system time and feed that into numberpicker, so number picker would be set like 3:06 instead of showing the first element of the array.
这个控件https://github.com/saiwu-bigkoo/Android-PickerView 有3D效果!!给项目加的时候,他这个不够灵活!
RT
It would be nice to be able to set the number of rows shown programmatically.
我在项目中加了三个该View用作省市区三级联动 每个宽度都是屏幕的1/3 但是当遇到某些市名过长的时候 文字左右会显示不下 直接被切掉了
在xml文件中设置最小值和最大值的时候,如果没有设置npv_TextArray,会闪退,空指针异常。看了代码,发现最小值在里面只是用于数组下标的作用。而不是展示的作用。不知道是作者故意如此,还是一个bug
I have developed a picker for some details but it scrolled to infinite.
How i can stop it at end of array list length ?
只想显示数字时用setMinValue()和setMaxValue()而不用setDisplayedValues()时会报错
Java代码:
NumberPickerView numberPicker = (NumberPickerView) findViewById(R.id.picker);
numberPicker.setMaxValue(10);
numberPicker.setMinValue(0);
numberPicker.setValue(2);
报错信息:
(maxValue - mMinValue + 1) should not be greater than mDisplayedValues.length now (maxValue - mMinValue + 1) is 11 and mDisplayedValues.length is 1
而原生的NumberPicker做同样的设置不会报错
I need create picker
-7 to 7
How configure picker?
Per default, the text is centered in the time picker. Is there a way to change the alignment to the left or right side? Thanks!
默认情况下,文本在时间选择器中居中。有没有办法改变左侧或右侧的对齐方式?谢谢!
If I set a listener to OnValueChangeListener
and then try to modify any view in the callback method, I get the well know android exception:
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
I can't drag to scroll, and I don't see anything about dragging or flinging in the readme file even though it promises better flinging by adjusting friction...
怎么根据当前的日期,设置默认值
Only the original thread that created a view hierarchy can touch its views.
in demo ActivityTimePicker
line 65:
replace
setData(mPickerViewH, 0, 11, h);
with
setData(mPickerViewH, 3, 4, 4);
hour picker show 1 and 12
NOT 3 and 4
I think it's a bug.
if setMinValue is not 0, number picker view will not work.
我用这个库做省市区三级联动时遇到的问题,有的省份或者城市下没有区,通过refreshByNewDisplayedValues方法设置一个空的String数组,然后就会抛异常,能否处理这样的问题呢?
java.lang.IllegalArgumentException: mMaxValue - mMinValue + 1 should not be greater than mDisplayedValues.length, now ((mMaxValue - mMinValue + 1) is 1 newDisplayedValues.length is 0, you need to set MaxValue and MinValue before setDisplayedValues(String[])
at cn.carbswang.android.numberpickerview.library.NumberPickerView.setDisplayedValues(NumberPickerView.java:505)
at cn.microants.merchants.app.store.fragment.CityPickerDialog.refreshByNewDisplayedValues(CityPickerDialog.java:173)
at cn.microants.merchants.app.store.fragment.CityPickerDialog.updateCities(CityPickerDialog.java:134)
at cn.microants.merchants.app.store.fragment.CityPickerDialog.onValueChange(CityPickerDialog.java:120)
at cn.carbswang.android.numberpickerview.library.NumberPickerView.respondPickedValueChanged(NumberPickerView.java:627)
at cn.carbswang.android.numberpickerview.library.NumberPickerView.access$1200(NumberPickerView.java:24)
at cn.carbswang.android.numberpickerview.library.NumberPickerView$1.handleMessage(NumberPickerView.java:362)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.os.HandlerThread.run(HandlerThread.java:61)
想让内容点击一个按钮后自动循环滚动 类似于摇奖机效果 然后点击一个按钮暂停滚动.
final String[] mDisplayValues=new String[]{"今天","明天","后天"};
numberPicker.setDisplayedValues(mDisplayValues);
numberPicker.setMinValue(0);
numberPicer.setMaxValue(2);
显示正常。
但是,
numberPicker.setMinValue(1);//代码中需要动态调节minValue进行限位
发生了两个问题:
1、由于限位造成的value改变,并没有触发onValueChanged事件
2、在numberPicker中,预期效果应该显示为 明天、后天,实际显示为 今天、明天
并且,UI显示的"今天"所对应的value为“明天”(1),也就是说,UI显示的值与实际的value出现了不一致的情况,实际的值是正确的,而UI显示的是错误的。
一个好用的控件,其显示范围应该能由setMinValue()和setMaxValue()来决定。
粗略的看下源代码,貌似不能简单的实现颜文字支持?
不知道是否可以提供些思路?
多谢!
THANK YOU SO MUCH for sharing and your hard work. Would like to add a bit more enhancement :)
Maybe, it's better to keep this method public so we can call when user press a button
Use case -
User (fling) scrolling > Quickly press OK/Pick button > number picker should stop at that value and stop scrolling animation
Making this method public already does stop the scroll animation and stop at picked value. 👍
public void stopScrolling() {
if (mScroller != null) {
...
}
}
Hi! Is there somehow a way to set drawable as background of divider?
I see you use private method drawLine(Canvas canvas)
to draw simple divider-lines. So is it ok to just call any other 'draw
' method on canvas
instead?
Can we give font to numberpicker?
你好,沒想到你這個庫我已經用了兩個項目,這個需求在第三個項目才出現。
比如說我想用你的庫做一個時間的選擇器,分鐘只可以選 0 和 30,
那我基本上是這樣做:
minutePicker.setDisplayedValues(new String[2]{"00", "30"});
minutePicker.setMinValue(0);
minutePicker.setMaxValue(30);
可是這樣會拋異常,因為你會檢查 (maxValue - mMinValue + 1 > mDisplayedValues.length),如果為true會拋異常。這樣看來你好似只支援連續的數字,是這樣嗎?
(當然了我可以自己弄一個List,只監聽picker返回的position。是這樣嗎?)
当调用setEnabled(false)把控件设置为不可用状态后,内部没有做相关的处理。
在README.MD中:
2)若设置的数据(String[] mDisplayedValues)会改变,可以使用如下组合方式进行设置:(与NumberPicker的更改数据方式一致)
int minValue = getMinValue(); int oldMaxValue = getMaxValue(); int oldSpan = oldMaxValue - minValue + 1; int newMaxValue = display.length - 1; int newSpan = newMaxValue - minValue + 1; if (newSpan > oldSpan) { setDisplayedValues(display); setMaxValue(newMaxValue); } else { setMaxValue(newMaxValue); setDisplayedValues(display); }或者直接使用NumberPickerView提供的方法:
refreshByNewDisplayedValues(String[] display)
使用此方法时需要注意保证数据改变前后的minValue值不变,以及设置的display不能够为null,且长度不能够为0。
如果使用与NumberPicker的更改数据方式一致的方法,可以更改最小值么?
你好大佬 请问该框架的混淆模板怎么写
比如我要选择1970年到2020年,就需要在string.xml中配置一堆数字。能不能对数值范围做一个支持,试了下setMinValue和setMaxValue貌似他会检查范围是否小于displayValue的长度,不配置textArray的话会报异常
当改变 displayedValues 的时候,监听器会失效,等一会才会有反应,希望能够改进
app:npv_ShowCount="当前加载的数组的长度“ 时,smoothScrollToValue()这个函数就不起作用了
例如我提供一个最小值 每次增加1最大值为30的纯数字NumberPickerView,我不想设置给NumberPickerView一个String类型的数组,该怎么弄?
我超喜歡這個控制,你簡直救了我一命啊!
Android自5.0之後的Date Picker逼你顯示日曆,如果我只是想用戶選月份和年份,日曆根本無法接受;
原生的NumberPicker又完全不能客制…
不過我發現一個問題,onValueChangeInScrolling回傳的newVal不正確,
而具體如何不正確則很難描述。
我有兩個NumberPickerView,一個是月份,一個是年份;
月份有12個數值,1到12
年份從1935到2100
我用debugger查看newVal的回傳數值;月份總是比最終停留的數值少2;
年份則是回傳了position,比如說我是1935開始,掃過1936,newVal回傳1。
如果這個可以解決就完美了~~ 我現在只能靠原本的onValueSelectedListener,沒有完全停定的話它就不懂得更新數值了
謝謝!
I to change the default typeface/font for NumberPickerView?
I want use a custom font.
npv_ShowCount 跟数据的长度相同时 npv_WrapSelectorWheel 失效
可以设置不循环滚动么?
我控件中只想显示一条数据用来滑动,
如何去除选中项顶部和底部默认黄色的横条?
private void setPicker(NumberPickerView picker, int start, int end) {
String[] texts = new String[end - start + 1];
for (int i = start; i <= end; ++i) {
texts[i - start] = String.valueOf(i);
}
int size = Math.abs(Math.min(start, picker.getMinValue()) - Math.max(end, picker.getMaxValue())) + 1;
picker.setDisplayedValues(new String[size]);
picker.setMinValue(start);
picker.setMaxValue(end);
picker.setValue(start);
picker.setDisplayedValues(texts);
}
这样的话没问题,setMaxValue如果和setMinValue对调时,滚动就会划出边界,还有闪退,建议给点提示。
Hey it's me again! 😄
I'm using the NumberPicker inside a RecyclerView, inside a NestedScrollView. I have the version 1.0.3. I noticed that when I call nofifyItemChanged(int) on the item that contains the NumberPicker, the NumberPicker sometimes goes "numb", as in it doesn't attach to the closest value when I scroll anymore. When this happens, it gives me the following exception:
07-09 14:49:25.379 7829-7829/com.*****.******** W/MessageQueue: Handler (cn.carbswang.android.numberpickerview.library.NumberPickerView$1) {d43ee1b} sending message to a Handler on a dead thread java.lang.IllegalStateException: Handler (cn.carbswang.android.numberpickerview.library.NumberPickerView$1) {d43ee1b} sending message to a Handler on a dead thread at android.os.MessageQueue.enqueueMessage(MessageQueue.java:325) at android.os.Handler.enqueueMessage(Handler.java:631) at android.os.Handler.sendMessageAtTime(Handler.java:600) at android.os.Handler.sendMessageDelayed(Handler.java:570) at cn.carbswang.android.numberpickerview.library.NumberPickerView.onTouchEvent(NumberPickerView.java:933) at android.view.View.dispatchTouchEvent(View.java:8547) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2107) at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2372) at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1722) at android.app.Activity.dispatchTouchEvent(Activity.java:2742) at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60) at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2333) at android.view.View.dispatchPointerEvent(View.java:8742) at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4136) at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4002) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3557) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3610) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3576) at an
Here is how I initialize the NumberPicker:
final String[] servings = new String[]{"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20"}; //holder.servings is the NumberPicker. holder.servings.setMinValue(1); holder.servings.setDisplayedValues(servings); holder.servings.setMaxValue(20); if (currentRecipe.serves > 0) holder.servings.setValue(currentRecipe.serves); else holder.servings.setValue(1); holder.servings.setOnValueChangedListener(new NumberPickerView.OnValueChangeListener() { @Override public void onValueChange(NumberPickerView picker, int oldVal, int newVal) { RecipeIngredientsAdapter.this.servings = newVal; RecipeIngredientsAdapter.this.notifyItemRangeChanged(0, getItemCount()-1); } });
Here's the layout:
<cn.carbswang.android.numberpickerview.library.NumberPickerView android:id="@+id/recipe_ingredients_servings" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@android:color/transparent" app:npv_ItemPaddingHorizental="5dp" app:npv_TextColorNormal="@android:color/white" app:npv_TextColorSelected="@android:color/white" android:layout_gravity="center_horizontal|top" app:npv_ShowCount="1" app:npv_MinValue="1" app:npv_MaxValue="20" app:npv_ShowDivider="false" app:npv_TextSizeNormal="40sp" app:npv_TextSizeSelected="40sp" app:npv_WrapSelectorWheel="false"/>
(By the way, I noticed you mistyped npv_ItemPaddingHorizental)
app:npv_WrapSelectorWheel="true" property not wokring... Tried both in XML as well as in Java
Can we edit numberpicker middle value from keyboard value?
现在列表中显示的10:30,中间的“:”这个符号太靠近下面了。我在软件中用了全局的字体。但是这儿没有自动替换。怎么样能给中间的“:”这个符号让处于中间呢?
注:
如果输入中文符的“:”,显示的时候效果会变成:“10: 30”
中间距离太大,求方案!谢谢各位大神!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.