android TimePicker 浅析

android TimePicker浅析

    • android TimePicker浅析
        • TimePicker是什么
        • spinner模式的布局文件

TimePicker是什么

TimperPicker是一个继承自FrameLayout的系统控件。这个控件是所谓的“组合控件”

什么是所谓的“组合控件”:个人理解就是,把一些(一些肯定多于一个)原有控件进行封装。一般是通过布局文件把一些原有控件按照规则摆放好,然后封装成一个大的控件。

所有TimerPicker里面没有重写onMeasure,onLayout,onDraw()这些View绘制相关的方法;也没有重写onInterceptTouchEvent(),onTouchEvent()这样的交互方法。

不过TimePicker里面用到了一个概念叫Delegate,翻译过来似乎是“代理”的意思。不清楚这是不是传说中的代理模式。不过这个和Java中的动态代理不是一个概念。

动态代理肯定要用到:java.lang.reflect.Proxy了。

这里的Delegate是很有意思的,会根据调用者设置的TimePickerandroid:timePickerMode="clock"或者android:timePickerMode="spinner"来加载不同的布局。

这里的spinner模式,是对NumberPicker的组合封装。可以看一下大致的布局。

想看一下 spinner模式下的效果图:可以看一下这个链接

spinner模式的布局文件






<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/timePickerLayout"
    android:orientation="horizontal"
    android:layout_gravity="center_horizontal"
    >

    <LinearLayout android:orientation="horizontal"

        android:layoutDirection="ltr">

        
        <NumberPicker
            android:id="@+id/hour"
        />

        
        <TextView
            android:id="@+id/divider"
        />

        
        <NumberPicker
            android:id="@+id/minute"
         />

    LinearLayout>

    
    <NumberPicker
        android:id="@+id/amPm"
    />

LinearLayout>

看到这个布局也就明白了 , TimerPicker就是用3个NumberPicker横向排列对齐起来的。然后再TimerPicker的代码里面,主要就是处理时间设置去获取的。

由于TimePicker代码里面全部是对时间的处理与回调,跟View本身没有什么关联,这里就不分析了。


关于clock模式,还没有去看…..

clock模式下,用到了一个类:RadialTimePickerView。是直接继承自View的,这个类比较复杂…(计算复杂)

你可能感兴趣的:(android TimePicker 浅析)