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));
}
}
}