Android时间选择器以纵向显示,并在横向中被截断

时间:2016-10-21 16:50:18

标签: android android-timepicker

我正在尝试让时间选择器在横向显示完整的时钟。 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 not displayed well on landscape mode
  2. 我的时间选择器没有标题。

    1. ScrollView fighting with scroll of TimePicker, Timepicker not scrolling as a result
    2. 它已经实施

      1. https://code.google.com/p/android/issues/detail?id=201766
      2. 尝试使用清单中的代码,但仍无效。

        更新 正如siddesh所建议的那样,将layout_height的{​​{1}}设置为TimePicker可以正常工作,但会切断肖像。现在,肖像高200dp但是被切断,景观完全显示出来:

        Landscape TimePicker with height 200dp fully shown

        Portrait TimePicker with height 200dp, with half cut off.

1 个答案:

答案 0 :(得分: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;