TimePicker で確定前の値を取得する


20130304timepicker

TimePicker では、EditText に入力した値は、その時点では確定していません。
Focus が変動したときに確定されます。

TimePicker の値を、別のボタンを押して、取得するときは、
TimePicker#clearFocus を実行します。

図で Button を押しても、14:45 にはならず、元の 13:45 が取得される。
TimePicker#clearFocus を実行すると、14:45 が取得される。

参考
TimePickerで確定前の値を取得する方法 – kobaring
How to get the time from a TimePicker when it is typed in – stackoverflow
Androidの標準Widgetを自作する(TimePicker) その(2) – techbooster
 この記事では TimePicker と言っていますが、NumberPicker ですね。


TimeEditText


20130302time_edit_text

123456 と入力すると 12時34分56秒 となる EditText を作る。
NumberPickerTimePicker をベースに変更した。

主な仕様は。
(1) 「時」「分」「秒」の NumberEditText を用意する。
(2) 「時」に2桁入力すると、「分」に Focus を移す。
(3) 「分」に2桁入力すると、「秒」に Focus を移す。
(4) 「秒’」に2桁入力すると、終了イベントを発生する。

ソースコードは Google code に置いています。

関連
NumberPicker
TimePicker
NumberEditText
・TimeEditText


NumberEditText


20130301number_edit_text

123456 と入力すると 12時34分56秒 となる EditText を作る。
NumberPickerTimePicker をベースに変更した。
まず、2桁を入力する EditText を作る。

主な仕様は。
(1) Focus が当たったときに、元のテキストをヒントに移して、テキストを消す。
(2) 2桁入力すると、終了イベントを発生する。
addTextChangedListenerTextWatcher を使用する。

ソースコードは Google code に置いています。

関連
NumberPicker
TimePicker
・NumberEditText
TimeEditText


DatePicker の文字を大きくする


20130219DatePickerSample2

DatePicker 移植版 にて、下記の変更を追加した。
(1) 文字を大きくする。
(2) 文字欄の幅も大きくする。
(3) 「月」の表示を「1月」「2月」から「01」「02」に変更する。

使い方

<xxx.MyDatePicker
	xmlns:custom="http://schemas.android.com/apk/res/xxx"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content" 
 	custom:datepicker_monthTwoDigit="true"
	custom:datepicker_textSize="48sp"       
	custom:datepicker_yearWidth="140dp"
	custom:datepicker_monthWidth="120dp"        
	custom:datepicker_dayWidth="120dp" />

ソースコードは Google code に置いています。

関連
TimePicker の移植
TimePicker の文字を大きくする
DatePicker の移植
・DatePicker の文字を大きくする


DatePicker の移植


20130218DatePickerSample1

donut(v1.6) の android/widget/DatePicker を移植した。
そのままコピーして、ユーザアプリとしてコンパイルを通るように、若干修正したものです。移植した NumberPicker を使っています。

ソースコードは Google code に置いています。

関連
TimePicker の移植
TimePicker の文字を大きくする
・DatePicker の移植
DatePicker の文字を大きくする


TimePicker の文字を大きくする


20130212TimePickerSample2

TimePicker 移植版 にて、下記の変更を追加した。
(1) 「秒」を追加した。
(2) 文字を大きくする。
(3) 文字欄の幅も大きくする。
(4) XML から setIs24HourView を設定する。

使い方

<xxx.MyTimePicker
	xmlns:custom="http://schemas.android.com/apk/res/xxx"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	custom:timepicker_textSize="60px"
    custom:timepicker_numberWidth="150px"
    custom:timepicker_visibilitySecond="true"   
    custom:timepicker_is24Hour="true" />

ソースコードは Google code に置いています。

関連
TimePicker の移植
・TimePicker の文字を大きくする
DatePicker の移植
DatePicker の文字を大きくする


TimePicker の移植


20130211TimePickerSample1

donut(v1.6) の android/widget/TimePicker を移植した。
そのままコピーして、ユーザアプリとしてコンパイルを通るように、若干修正したものです。移植した NumberPicker を使っています。

ソースコードは Google code に置いています。

関連
・TimePicker の移植
TimePicker の文字を大きくする
DatePicker の移植
DatePicker の文字を大きくする


Andorid 3.0 以降の NumberPicker


20130204numberpicker 20130207numberpicker_api11 20130207numberpicker_api16
左から Andorid 1.6 / 3.0 / 4.1

Andorid 3.0 (API 11) から NumberPicker がサポートされた。

レイアウトが Andorid 1.6 と 3.0 と 4.1 とで大きく変わっています。
Andorid 3.0 で 上下に Wheel という数字が表示されるようになった。
そのため、Andorid 1.6 と比べて、上下に長くなった。
Andorid 4.1 で 上下のボタンが非表示になった。
そのため、Andorid 3.0 と比べて、すっきりした感じになった。

ソースを見てみると、Andorid 1.6 と比べて、大幅に増えています。
その内訳は Wheel に関するもののようです。
Andorid 1.6 : 410行
Andorid 3.x : ソースが公開されていない
Andorid 4.0 : 1820行
Andorid 4.1 : 2470行

関連
NumberPicker の移植
NumberPicker の文字を大きくする
・Andorid 3.0 以降の NumberPicker
9patchの怪


NumberPicker の文字を大きくする


20130205numberpicker_size

NumberPicker 移植版 にて、文字を大きくできるようにした。

使い方

<xxx.MyNumberPicker
	android:layout_width="160dp"
	android:layout_height="wrap_content" 
	android:textSize="60sp" />

ソースコード: 文字の大きさを設定する

private void setTextAttribute( Context context, AttributeSet attrs, int defStyle ) {
	if ( attrs == null ) return;
	String textSize = attrs.getAttributeValue( "http://schemas.android.com/apk/res/android", "textSize" );
	if ( textSize == null ) return;
	TextView tv = new TextView( context, attrs, defStyle ) ;
	float size = tv.getTextSize();
	setTextSize( TypedValue.COMPLEX_UNIT_PX, size );
}
public void setTextSize( int unit, float size ) {
	mText.setTextSize( unit, size );    
}	

画像ファイルを若干修正しています。
これについては、9patchの怪 をご覧ください。

ソースコードは Google code に置いています。

関連
NumberPicker の移植
・NumberPicker の文字を大きくする
Andorid 3.0 以降の NumberPicker
9patchの怪


NumberPicker の移植


20130204numberpicker

Android の UI に NumberPicker があるが、internal クラスであるため使用できない。
donut(v1.6) の com/android/internal/widget/NumberPicker.java を移植した。
そのままコピーして、ユーザアプリとしてコンパイルを通るように、若干修正したものです。

移植のポイントは、画像とレイアウトファイルを res ディレクトリにコピーしたくらいです。

ソースコードは Google code に置いています。

参考
Android 2.xでNumberPickerを使う – Android Dev Blog (by @korodroid)
Android NumberPicker を拡張して ItemPicker を作ってみた – Y.A.M の 雑記帳

関連
・NumberPicker の移植
NumberPicker の文字を大きくする
Andorid 3.0 以降の NumberPicker
9patchの怪