Android号码卡被卡住了

时间:2016-06-21 09:21:44

标签: java android numberpicker

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

enter image description here

我正在扩展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

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

3 个答案:

答案 0 :(得分:0)

将其更改为具有数字类型的Edittext,如果客户端将数字设置为范围的上限或下限,则使用Toast。它在视觉上更优雅,并且根本不会给你任何问题

答案 1 :(得分:0)

您可以使用Fantastic PickView

请参阅PickView

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

答案 2 :(得分:0)

也许你可以使用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&#39;,您可以将挑选的分钟数舍入到最接近的有效值。

布局中的scrollView将减少与拾取器大小相关的问题。 我希望它有所帮助。