TimePicker

中級なのかわかりませんが(そうでもない気がするけど)、このサイトにおけるぼくのイメージが本件中級にしたかったので、ここに入れました。

SDKにある時刻抽出ピッカーが、時間と分までみたいなのですが、いま作っているアプリでは秒もほしくて。と言うわけで、SDKの基本部品であるNumberPickerを使ってサンプルを作りましたので公開します。

レイアウトXMLを使用しないので、新規プロジェクトにこのコードをコピペするだけで動くと思います。

0秒から23時59分59秒まで指定できるPickerです。

以下のソースコードには、設定値を取得する処理を書いていません(だから中級?)。

TextViewに取得値が書き込まれるように書いていますので、単純にはButtonを用意しておき、ボタンを押したらTextViewの値を取り込めば実用可能と思います。

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.view.Gravity;

import android.widget.LinearLayout;

import android.widget.NumberPicker;

import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//setContentView(R.layout.activity_main);

LinearLayout ll = new LinearLayout(this);

LinearLayout ll0 = new LinearLayout(this);

LinearLayout ll1 = new LinearLayout(this);

ll.setOrientation(LinearLayout.VERTICAL);

ll0.setOrientation(LinearLayout.HORIZONTAL);

ll1.setOrientation(LinearLayout.HORIZONTAL);

ll0.setGravity(Gravity.CENTER);

ll1.setGravity(Gravity.CENTER);

ll.addView(ll0);

ll.addView(ll1);

NumberPicker np0 = new NumberPicker(this);

NumberPicker np1 = new NumberPicker(this);

NumberPicker np2 = new NumberPicker(this);

np0.setMaxValue(23);

np0.setMinValue(0);

np0.setValue(0);

np0.setTag("a");

np1.setMaxValue(59);

np1.setMinValue(0);

np1.setValue(0);

np1.setTag("b");

np2.setMaxValue(59);

np2.setMinValue(0);

np2.setValue(0);

np2.setTag("c");

TextView hour = new TextView(this);

TextView min = new TextView(this);

TextView sec = new TextView(this);

hour.setText("時");

min.setText("分");

sec.setText("秒");

TextView hour1 = new TextView(this);

TextView min1 = new TextView(this);

TextView sec1 = new TextView(this);

hour1.setText("時");

min1.setText("分");

sec1.setText("秒");

ll0.addView(np0);

ll0.addView(hour);

ll0.addView(np1);

ll0.addView(min);

ll0.addView(np2);

ll0.addView(sec);

final TextView tvHour = new TextView(this);

final TextView tvMin = new TextView(this);

final TextView tvSec = new TextView(this);

ll1.addView(tvHour);

ll1.addView(hour1);

ll1.addView(tvMin);

ll1.addView(min1);

ll1.addView(tvSec);

ll1.addView(sec1);

setContentView(ll);

NumOnValueChangeListener listener = new NumOnValueChangeListener(tvHour,tvMin,tvSec);

np0.setOnValueChangedListener(listener);

np1.setOnValueChangedListener(listener);

np2.setOnValueChangedListener(listener);

}

class NumOnValueChangeListener implements NumberPicker.OnValueChangeListener {

int a=0,b=0,c=0,d=0,e=0,f=0;

TextView tv0, tv1, tv2;

public NumOnValueChangeListener(TextView tv0, TextView tv1, TextView tv2){

this.tv0 = tv0;

this.tv1 = tv1;

this.tv2 = tv2;

}

@Override

public void onValueChange(NumberPicker picker, int oldVal, int newVal) {

if(picker.getTag().equals("a")){

a = newVal;

}else if(picker.getTag().equals("b")){

b = newVal;

}else if(picker.getTag().equals("c")){

c = newVal;

}

tv0.setText(String.format("%d", a));

tv1.setText(String.format("%d", b));

tv2.setText(String.format("%d", c));

}

}

}