Android中心DatePicker不起作用

时间:2016-11-09 17:23:40

标签: android

如何将DatePicker居中? Layout_centerhorizo​​ntal 不起作用,它将左对齐。

这是我的代码:

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text=""
    android:id="@+id/txtTitulo"
    android:textIsSelectable="true"

    android:textStyle="normal|bold"
    android:paddingLeft="22dp"/>
<DatePicker
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

    android:id="@+id/DatePicker1"
    android:calendarViewShown="false"
    android:layout_centerHorizontal="true"
    >
</DatePicker></LinearLayout>
</ScrollView>

5 个答案:

答案 0 :(得分:0)

DatePicker的父级是LinearLayout。所以设置

android:layout_gravity="center_horizontal"

在DatePicker中。

答案 1 :(得分:0)

答案 2 :(得分:0)

将此添加到您的DatePicker:

android:layout_gravity="center"

这里解释了layout_gravity和layout_centerVertical / Horizo​​ntal之间的区别: https://stackoverflow.com/a/25054311/7137584

答案 3 :(得分:0)

为了使DatePicker居中,我使用了ConstraintLayout。

代码在ConstraintLayout内部是这样的:

    <DatePicker
        android:id="@+id/dp_dueDate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/margin_large"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/ll_priority"/>

宽度:wrap_content

layout_constraintLeft_toLeftOf:父级

layout_constraintRight_toRightOf:父级

答案 4 :(得分:0)

刚刚偶然发现了这个问题,并设法通过代码解决了它。只是想在其他人仍然遇到问题时分享这个(在 Kotlin 中):

//retrieve DatePicker object
val datePicker = view.findViewById<DatePicker>(R.id.date_picker)

//go to its first child (LinearLayout), retrieve its LayoutParams object, cast to 
//FrameLayout.LayoutParams object and set the gravity to Center
datePicker[0].let { ll ->
  if(ll is LinearLayout && ll.layoutParams is FrameLayout.LayoutParams) {
    (ll.layoutParams as FrameLayout.LayoutParams).gravity = Gravity.CENTER
  }
}

或者:

//Create a generic function to center DatePicker object
fun DatePicker?.center() {
  if(this != null) {
    this.getChildAt(0)?.let { ll ->
      if(ll is LinearLayout && ll.layoutParams is FrameLayout.LayoutParams) {
         (ll.layoutParams as FrameLayout.LayoutParams).gravity = Gravity.CENTER
      }
    }
  }
}

//And to use:
val dp = view.findViewById<DatePicker>(R.id.date_picker)
dp.center()