1. 程式人生 > >改變DatePicker和TimePicker大小,使之橫向並列展示

改變DatePicker和TimePicker大小,使之橫向並列展示

    今天專案中使用到了日期+時分選擇控制元件,由於系統有DatePicker和TimePicker所以不想再去寫控制元件或者找開源專案,但是這兩個控制元件橫向排列卻又太大了,於是去網上查了一些方法來修改控制元件大小,可是這些方法都是通過修改子控制元件大小和字型大小來實現改變兩個控制元件大小的,這種方法感覺在5.0上可能不會適用(在Android Studio上預覽這兩個控制元件變化比較大),而且實現方式過於複雜,於是考慮使用簡便且通用一些的方式來實現,總歸功夫不負有心人,順利完成.

1.修改FrameLayout的onmeasure方法.

public class MyWrapContentView
extends FrameLayout {
public MyWrapContentView(Context context) { super(context); } public MyWrapContentView(Context context, AttributeSet attrs) { super(context, attrs); } public MyWrapContentView(Context context, AttributeSet attrs, int defStyleAttr) { super
(context, attrs, defStyleAttr); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { widthMeasureSpec = MeasureSpec.makeMeasureSpec(MeasureSpec.AT_MOST,0);//核心程式碼 super.onMeasure(widthMeasureSpec, heightMeasureSpec); } }

2.使用該控制元件包裹DatePicker和TimePicker

    <cn.schope.lrr.view.MyWrapContentView
        android:layout_gravity="center" #此處必需設定居中,外層是Relativelayout就用centerinparent,是LinearLayout便用layoutgravity
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    <LinearLayout
        android:layout_gravity="center"
        android:id="@+id/ll_picker"
        android:layout_width="wrap_content"#使用包裹體
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <DatePicker
            android:id="@+id/dp_submit_day"
            android:layout_width="wrap_content"#使用包裹體
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal" />
        <TimePicker
            android:layout_width="wrap_content"#使用包裹體
            android:layout_height="wrap_content"
            android:id="@+id/time_picker"/>
    </LinearLayout>
    </cn.schope.lrr.view.MyWrapContentView>

3.使用Nineoldandroids開源庫中的ViewHelper縮放控制元件.(V4包的ViewCompat也可)

        View ll_picker = view.findViewById(R.id.ll_picker);
        ViewHelper.setScaleX(ll_picker,0.8f);//可以隨意指定縮小百分比
        ViewHelper.setScaleY(ll_picker,0.8f);

如此就可以實現DatePicker和TimePicker橫向並列顯示了.