【问题标题】:Android numberpicker getting stuckAndroid numberpicker 卡住了
【发布时间】:2016-10-22 18:20:58
【问题描述】:

我有一个数字选择器对话框来选择小时和分钟(15 分钟间隔)。它在大屏幕上运行良好,但在小屏幕和旧设备上,如果我尝试使用触摸滚动,它就会卡住。

我正在扩展 android.widget.NumberPicker 并减小对某些设备有帮助的字体大小。

public class TimerNumberPicker extends android.widget.NumberPicker {

    public TimerNumberPicker(Context context) {
        super(context);
    }

    public TimerNumberPicker(Context context, AttributeSet attrs){
        super(context,attrs);
    }

    @Override
    public void addView(View child) {
        super.addView(child);
        updateView(child);
    }

    @Override
    public void addView(View child, ViewGroup.LayoutParams params) {
        super.addView(child, params);
        updateView(child);
    }

    @Override
    public void addView(View child, int index, ViewGroup.LayoutParams params) {
        super.addView(child, index, params);
        updateView(child);
    }

    private void updateView(View view) {
        if(view instanceof EditText){
            ((EditText) view).setTextSize(TypedValue.COMPLEX_UNIT_SP,16);
            view.setTag(FontUtil.TAG_CONDENSED_LIGHT);
            FontUtil.getInstence(getContext()).setFontByTag(view);
        }
    }
}

更复杂的是分钟只有值(0, 15, 30, 45),而我必须setWrapSelectorWheel to false

我正在考虑是否可以始终显示向上和向下箭头,然后禁用滚动。

【问题讨论】:

    标签: java android numberpicker


    【解决方案1】:

    也许您可以使用TimePicker 解决它。

    这可能是布局:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:padding="8dp"
    android:layout_height="wrap_content">
    <ScrollView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            >
    <TimePicker
        android:id="@+id/time_picker"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />
    
    <Button
        android:id="@+id/date_time_set"
        android:layout_width="match_parent"
        android:text="Set"
        android:layout_height="wrap_content" />
        </LinearLayout>
    </ScrollView>
    

    虽然对话框可以包含在普通警报中:

    private void showTimePicker(){
        final View dialogView = View.inflate(getActivity(), <time_picker_container_layout_id>, null);
        final AlertDialog alertDialog = new AlertDialog.Builder(getActivity()).create();
    
        dialogView.findViewById(R.id.date_time_set).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
    
                TimePicker timePicker = (TimePicker) dialogView.findViewById(R.id.time_picker);
    
                String time = timePicker.getCurrentHour()+":"+timePicker.getCurrentMinute());
    
                dateTime.setText(time);
                alertDialog.dismiss();
            }});
    
    
        TimePicker timePicker = (TimePicker) dialogView.findViewById(R.id.time_picker);
    
        timePicker.setCurrentHour(<default_hour>);
        timePicker.setCurrentMinute(<default_minute>);
    
        alertDialog.setView(dialogView);
        alertDialog.show();
    }
    

    如果您只需要显示 15',您可以将选择的分钟四舍五入到最接近的有效值。

    布局中的滚动视图将减少与选择器大小相关的问题。 我希望它有所帮助。

    【讨论】:

      【解决方案2】:

      您可以使用 Fantastic PickView

      PickView

      这是一个帮助我们像 IOS 系统 WheelView 小部件一样选择日期或省份的帮助库。

      【讨论】:

      • 在那里做广告,是吗?
      • 不,我不是图书馆的所有者,我只是使用它,它工作完美
      • 正如@Vucko 建议的那样,您应该表明您是图书馆的所有者,并提供一个很好的例子来说明这如何提供帮助:meta.stackoverflow.com/questions/298734/…
      • @antonio 他明确表示他不是那个图书馆的所有者。
      【解决方案3】:

      将其更改为带有数字类型的 Edittext,如果客户输入的数字高于或低于您的范围,则使用 Toast。它在视觉上更优雅,而且根本不会给您带来任何问题

      【讨论】:

        猜你喜欢
        • 2013-12-26
        • 1970-01-01
        • 2021-01-30
        • 1970-01-01
        • 2021-03-19
        • 1970-01-01
        • 2017-01-11
        • 2018-11-08
        • 1970-01-01
        相关资源
        最近更新 更多