我有一个NumberPicker,它有一个格式化程序,可以在NumberPicker旋转或手动输入值时格式化显示的数字.这工作正常,但是当第一次显示NumberPicker并且我用setValue(0)0 初始化它时没有被格式化(它应该显示为" - "而不是0).一旦我从那一点旋转NumberPicker一切正常.
如何强制NumberPicker始终格式化 - 在第一次渲染时以及在使用键盘手动输入数字时?
这是我的格式化程序
public class PickerFormatter implements Formatter {
private String mSingle;
private String mMultiple;
public PickerFormatter(String single, String multiple) {
mSingle = single;
mMultiple = multiple;
}
@Override
public String format(int num) {
if (num == 0) {
return "-";
}
if (num == 1) {
return num + " " + mSingle;
}
return num + " " + mMultiple;
}
}
Run Code Online (Sandbox Code Playgroud)
我将格式化程序添加到选择器中setFormatter(),这是我对拾取器所做的全部操作.
picker.setMaxValue(max);
picker.setMinValue(min);
picker.setFormatter(new PickerFormatter(single, multiple));
picker.setWrapSelectorWheel(wrap);
Run Code Online (Sandbox Code Playgroud) 在 Jetpack Compose 中创建 NumberPicker 小部件的推荐解决方案是什么?类似于下图。我可以在可组合项中使用 AndroidView 创建 NumberPicker,但该视图似乎不允许快速滑动或捕捉到位置。顺便说一句,下面的 UI 显示了连续放置的三个 NumberPicker。它不应该代表 DatePicker
kotlin numberpicker android-number-picker android-jetpack android-jetpack-compose
有没有办法增加数字选择器的衰落边缘或更改顶部/底部文本alpha?我能够扩展NumberPicker类并更改数字选择器轮的alpha但是一旦我开始滚动alpha也会应用到中心文本.正如你所看到的,我选择了小时值并且alpha应用于所有文本.我希望alpha只是顶部和底部的数字.我有什么方法可以做到这一点.?
private void updateTextAttributes(String fontName) {
for (int i = 0; i < getChildCount(); i++) {
View child = getChildAt(i);
if (child instanceof EditText) {
try {
Field selectorWheelPaintField = NumberPicker.class.getDeclaredField("mSelectorWheelPaint");
selectorWheelPaintField.setAccessible(true);
Typeface typeface = Typeface.createFromAsset(getContext().getAssets(), "fonts/SFUIDisplay-" + fontName + ".ttf");
Paint wheelPaint = ((Paint) selectorWheelPaintField.get(this));
wheelPaint.setTextSize(mTextSize);
wheelPaint.setTypeface(typeface);
wheelPaint.setColor(mTextColor);
wheelPaint.setAlpha(50); //It does change alpha in the beginning but once I scroll then it also changes center text color
EditText editText = ((EditText) child);
editText.setTextColor(mTextColor);
editText.setTextSize(pixelsToSp(getContext(), mTextSize));
editText.setTypeface(typeface);
editText.setAlpha((float) 1.0);
invalidate(); …Run Code Online (Sandbox Code Playgroud) android android-custom-view android-layout android-number-picker
如何使数字选择器滚动/速度更快?目前从00分钟到59分钟需要付出很多努力.我已经尝试了一些示例来自Android中Viewpager控制器的减速速度,并将其应用于数字选择器,但我没有看到任何差异.
try {
Field mScroller;
mScroller = NumberPicker.class.getDeclaredField("mFlingScroller");
mScroller.setAccessible(true);
FixedSpeedScroller scroller = new FixedSpeedScroller(getContext(),null,true);
// scroller.setFixedDuration(5000);
// scrollBy(0,1500);
Log.v("Scroller",""+mScroller); //getting the mFlingScroller field
mScroller.set(this, scroller);
} catch (NoSuchFieldException | IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
public class FixedSpeedScroller extends Scroller {
private int mDuration = 10;
public FixedSpeedScroller(Context context) {
super(context);
}
public FixedSpeedScroller(Context context, Interpolator interpolator) {
super(context, interpolator);
}
public FixedSpeedScroller(Context context, Interpolator interpolator, boolean flywheel) {
super(context, interpolator, flywheel);
}
@Override
public void startScroll(int …Run Code Online (Sandbox Code Playgroud) 我正在构建一个带有一个NumberPicker和两个按钮的库,这些按钮控制数字的向上和向下。我将最小值和最大值设置为NumberPickersetMin、setMax、setValue,然后我在 setDisplayValues 方法中设置了一个有序数组。
我已经构建了一个隔离组件的示例,并且它工作正常。
但是当我尝试在我的应用程序中使用我的组件时,该组件无法按预期工作。当组件显示时,值限制不是正确的值。当我刷新值并移动选择器时,它会设置为正确的值,并且一切正常。但是第一次没有按预期工作。
我试图将NumberPicker隔离放在应用程序中,结果是一样的。任何的想法?
在您看到 14 向下的图像中......假设什么都没有。在其他 14 中假设为 1。选择器的最大值为 14。
我有一个数字选择器,用于以 MB 为单位设置数据限制。现在,我有 numberPicker,包含按顺序排列的数值,如 [1,2,3,....., 2000 MB]。
但我想要一个 numberPicker,它应该包含像 [100,200,300,...., 2000MB] 这样的数值。我怎样才能做到这一点?
我正在开发在列表项视图中具有EditText的应用程序。接受数值和带有“ +”号的值列表。提交时,将调用一个函数,该函数将评估该字符串并添加该字符串中存在的值(以“ +”分隔)。现在的问题是我已经设定
'inputType="number'
到EditText框,但是在数字键盘上没有'+'号。我试图使用'digits = 0123456789 +',但是没有用
我正在制作一个数字选择器对话框,有两个数字选择器,数年和数月.我想在这两个数字选择器中显示一些默认值,除了0,0
码::
final NumberPicker numberPickerYear = (NumberPicker) expDialog.findViewById(R.id.numberPickerYears);
final NumberPicker numberPickerMonth = (NumberPicker) expDialog.findViewById(R.id.numberPickerMonths);
numberPickerYear.setMaxValue(35);
numberPickerYear.setMinValue(0);
numberPickerYear.setWrapSelectorWheel(true);
numberPickerMonth.setMaxValue(11);
numberPickerMonth.setMinValue(0);
numberPickerMonth.setWrapSelectorWheel(true);
Run Code Online (Sandbox Code Playgroud)