Android时间选择器在竖屏模式下正常显示,但在横屏模式下被裁剪。

4

我试图让时间选择器在横屏显示整个时钟。该TimePicker位于GridLayout中,它不像DialogFragmentTimePickerDialog那样覆盖屏幕。

目前,在横屏模式下会显示如下内容:

Only time from time picker shown

可以看到,你无法使用任何东西来选择时间,只有默认时间。我想像纵向模式(正常工作)一样显示整个时钟:

Full time picker shown

时间选择器的布局:

<package.name.ScrollableTimePicker
                android:id="@+id/time_picker"
                android:layout_height="wrap_content"
                android:layout_width="match_parent" />

扩展TimePicker的类:
public class ScrollableTimePicker extends TimePicker {

    public ScrollableTimePicker(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

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

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

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        // Keeps events to time picker
        if (ev.getActionMasked() == MotionEvent.ACTION_DOWN) {
            ViewParent p = getParent();
            if (p != null) {
                p.requestDisallowInterceptTouchEvent(true);
            }
        }

        return false;
    }
}

我在互联网上搜索并发现以下帖子没有帮助我:
  1. Android TimePicker在横屏模式下显示不好
我的时间选择器没有标题。
  1. ScrollView与TimePicker的滚动相冲突,因此TimePicker无法滚动
已经实施了。
  1. https://code.google.com/p/android/issues/detail?id=201766
尝试在清单中使用代码,但仍然不起作用。 更新 正如siddesh建议的那样,将TimePicker的layout_height设置为200dp可以解决问题,但它会削减纵向。现在,Portrait是200dp高,但被削减了一半,而Landscape则完全显示: 高度为200dp的横向TimePicker完全显示 高度为200dp的纵向TimePicker,一半被削减。

@siddhesh 它不是一个DatePickerDialog,它是一个TimePicker(也不是一个TimePickerDialog) - Moon Cheesez
@siddhesh,所以当我旋转手机时,TimePicker会被关闭?但是为什么在我旋转回来后它仍然可以工作呢? - Moon Cheesez
我不明白你想说什么,最好使用 dismiss 在 timepicker 上消除。 - siddhesh
@siddhesh 你想让我取消什么?TimePicker不在对话框或DialogFragment中。它是GridLayout的一部分。它不会覆盖活动。 - Moon Cheesez
但是你提供的视图看起来像是对话框片段。 - siddhesh
显示剩余4条评论
1个回答

1
我也曾遇到过这个问题,当TimePicker在ScrollView中时,您的诊断非常有帮助。
您可以在活动中以编程方式设置TimePicker的高度。
在onCreate()中添加以下内容:
TimePicker tp = (TimePicker) findViewById(R.id.time_picker);

// get display dimensions
Point p = new Point();
getWindowManager().getDefaultDisplay().getSize(p);

int newHeight;

if(p.x > p.y) {
    // if landscape, convert 200dp to px
    newHeight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 200, getResources().getDisplayMetrics());
} else {
    newHeight = WindowManager.LayoutParams.WRAP_CONTENT;
}

// set TimePicker height
tp.getLayoutParams().height = newHeight;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接