Android 设置NumberPicker的增加/减少间隔
是否可以将NumberPicker的增加/减少间隔设置为其他值?例如到50(50、100、150、200、250等)?或者它需要一些定制/破解吗?我想你可以这样做:Android 设置NumberPicker的增加/减少间隔,android,Android,是否可以将NumberPicker的增加/减少间隔设置为其他值?例如到50(50、100、150、200、250等)?或者它需要一些定制/破解吗?我想你可以这样做: 为您的选择器初始化a: int NUMBER_OF_VALUES = 10; //num of values in the picker int PICKER_RANGE = 50; ... String[] displayedValues = new String[NUMBER_OF_VALUES]; //Populate t
- 为您的选择器初始化a:
int NUMBER_OF_VALUES = 10; //num of values in the picker int PICKER_RANGE = 50; ... String[] displayedValues = new String[NUMBER_OF_VALUES]; //Populate the array for(int i=0; i<NUMBER_OF_VALUES; i++) displayedValues[i] = String.valueOf(PICKER_RANGE * (i+1)); /* OR: if the array is easy to be hard-coded, then just hard-code it: String[] displayedValues = {"50", "100", "150", .....}; */
/* NOTE: Your picker range has to be [0, displayedValues.size()-1] to be consistent with the array index (displayedValues index). */ //ToDo: Initialize the picker first. numPicker.setMinValue(0); numPicker.setMaxValue(displayedValues.size()-1); numPicker.setDisplayedValues(displayedValues);
- 要获取/设置选择器的值时:
//To get the current value in the picker choosenValue = displayedValues[numPicker.getValue()]; //To set a new value (let's say 150) for( int i=0; i<displayedValues.length ; i++ ) if( displayedValues[i].equals("150") ) numPicker.setValue(i);
//获取选择器中的当前值 choosenValue=displayedValues[numPicker.getValue()]; //设置新值(例如150)
对于(int i=0;i@iturki的最后一个点设置一个值。 因为valueInNumberPicker X PICKER_RANGE=ValueInPlayedValueArray 因此,我们可以通过以下方式避免for循环:
我的2美分// PICKER_RANGE= 50 so 150/50 -1 = 2, numPicker.setValue(2) == 150 numPicker.setValue(150/PICKER_RANGE -1);
顺便说一句,iturki的回答很好。我使用了onScrollListener以不同的步长滚动,使用onValueChanged以处理数字键盘的直接输入。使用时,您需要两个监听器中都可用的变量oldValue
在onScrollListener中,我使用STATE_IDLE仅仅是因为它可以工作,我不理解这三种用法之间的100%区别……我认为您可以将它们用于此目的 在滚动之前,您需要全局oldValue变量来知道旧值。我还没有找到其他解决方案。if子句是最小(0)和最大(1000)边界 这三个调用更新我的元素(vites是一个耦合的progressBar,speedPicker是numberPicker) 在onValueChange中,我还更新了元素,并设置了oldValue 顺便说一下,这里的步长是100int oldValue = 0;
speedPicker.setOnScrollListener(new OnScrollListener() { public void onScrollStateChange(NumberPicker speedPicker, int scrollState) { if (scrollState == NumberPicker.OnScrollListener.SCROLL_STATE_IDLE) { if (speedPicker.getValue() < oldValue){ if (speedPicker.getValue() >= 100) oldValue-=100; else oldValue = 0; } else{ if (speedPicker.getValue() <= 900) oldValue+=100; else oldValue = 1000; } speedPicker.setValue(oldValue); vitess.setProgress(oldValue); ((MainActivity) getActivity()).setSpeed(oldValue); } else if (scrollState == NumberPicker.OnScrollListener.SCROLL_STATE_FLING) { } else if (scrollState == NumberPicker.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) { } } }); speedPicker.setOnValueChangedListener(new OnValueChangeListener() { public void onValueChange(NumberPicker speedPicker, int oldVal, int newVal) { oldValue = oldVal; speedPicker.setValue(newVal); vitess.setProgress(newVal); ((MainActivity) getActivity()).setSpeed(newVal); } });
speedPicker.setOnScrollListener(新的OnScrollListener(){ CrollStateChange上的公共无效(NumberPicker speedPicker,int scrollState){ if(scrollState==NumberPicker.onscrollllistener.SCROLL\u STATE\u IDLE){ if(speedPicker.getValue()
=100) oldValue-=100; 其他的 oldValue=0; } 否则{
如果(speedPicker.getValue()一天中有点晚,但这对我来说很有用numberPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { @Override public void onValueChange(NumberPicker numberPicker, int oldVal, int newVal) { if (newVal > oldVal) { numberPicker.setValue(newVal+(myInterval-1)); } else if (newVal < oldVal) numberPicker.setValue(newVal-(myInterval-1)); } });
感谢您的回复和建议的解决方案。但是,我不想限制用户在选择器中输入任何精确的值。例如,如果您想输入值47或48,您应该可以自由地这样做。如果双击选择器,这也是数字选择器的默认行为。因此,您的问题不是关于numberPicker.setOnValueChangedListener(新的numberPicker.OnValueChangeListener(){ @凌驾 值更改时的公共无效(NumberPicker NumberPicker、int-oldVal、int-newVal){ 如果(newVal>oldVal){ numberPicker.setValue(newVal+(myInterval-1)); }else if(newVal
?!当然可以。我想要的是在滚动或使用NumberPicker的上/下箭头时预设递增/递减间隔。但是如果您作为用户想要在这些间隔之间输入更精确的值,您应该被允许这样做,这是NumberPicker的默认行为。我还没有测试d你的解决方案还没有,所以它可能按照这里所描述的那样工作。但是我必须在开始时添加一些东西,比如说4-5英寸/减少1被onValueChange识别,然后值改变100。INumberPicker的递增/递减间隔
numberPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { @Override public void onValueChange(NumberPicker numberPicker, int oldVal, int newVal) { if (newVal > oldVal) { numberPicker.setValue(newVal+(myInterval-1)); } else if (newVal < oldVal) numberPicker.setValue(newVal-(myInterval-1)); } });