TimePickerを使用して、ユーザーが時間を選択できるようにしました。 ここ および ここでも を参照してください。しかし、ユーザーに2番目を選択させる方法も見つかりませんでした。これで、ユーザーは時と分を選択できますが、秒は選択できません。 02:05:10の時間を設定したい場合は、どうすればよいですか? TimePickerを使用して秒を選択する方法は?
最善の解決策は、Timeクラスと3つのNumberPickerを使用して、独自のTimePickerを作成することだと思います。
数秒のTimePickerを備えたオープンソースプロジェクトをGitHubで公開しました。
https://github.com/IvanKovac/TimePickerWithSeconds
見てください。
迅速で汚い方法の1つは、2つのTimePickersを使用することです。1つは時間、分、もう1つは分を秒として使用します。最初の数分で未使用の時間を非表示にします。これは24時間モードでのみ機能します。最初に秒単位のタイムピッカーを宣言する必要があるため、下に配置します。
<RelativeLayout
<TimePicker
Android:id="@+id/timePicker_Sec"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginLeft="76dp" />
<TimePicker
Android:id="@+id/timePicker"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignTop="@+id/timePicker_Sec"
Android:layout_marginLeft="0dp" />
</RelativeLayout>
これを回避する最善の方法は、タイムピッカーの代わりに3つの別々の「ナンバーピッカー」を作成することです...私はそれらを線形レイアウト内に配置し、正常に機能しました。
次に、3つの別々の変数内に値を格納するだけです。 int Hours、int Minutes、int Secondsを使用して、計算を行います。
これは、ウイルスを含む可能性のある外部ソースをダウンロードせずに回避する方法でした。
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:gravity="center">
<NumberPicker
Android:id="@+id/numpicker_hours"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content">
</NumberPicker>
<NumberPicker
Android:id="@+id/numpicker_minutes"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginLeft="8dp"
Android:layout_marginRight="8dp">
</NumberPicker>
<NumberPicker
Android:id="@+id/numpicker_seconds"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content">
</NumberPicker>
</LinearLayout>
これは秒付きのカスタムTimePickerDialogです。
MainActivity.Java
import Android.content.SharedPreferences;
import Android.preference.PreferenceManager;
import Android.support.v7.app.AlertDialog;
import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;
import Android.view.View;
import Android.widget.Button;
import Android.widget.NumberPicker;
import Android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
final TextView timeTV = findViewById(R.id.time_text_view);
timeTV.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View view = View.inflate(MainActivity.this, R.layout.time_dialog, null);
final NumberPicker numberPickerHour = view.findViewById(R.id.numpicker_hours);
numberPickerHour.setMaxValue(23);
numberPickerHour.setValue(sharedPreferences.getInt("Hours", 0));
final NumberPicker numberPickerMinutes = view.findViewById(R.id.numpicker_minutes);
numberPickerMinutes.setMaxValue(59);
numberPickerMinutes.setValue(sharedPreferences.getInt("Minutes", 0));
final NumberPicker numberPickerSeconds = view.findViewById(R.id.numpicker_seconds);
numberPickerSeconds.setMaxValue(59);
numberPickerSeconds.setValue(sharedPreferences.getInt("Seconds", 0));
Button cancel = view.findViewById(R.id.cancel);
Button ok = view.findViewById(R.id.ok);
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setView(view);
final AlertDialog alertDialog = builder.create();
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
alertDialog.dismiss();
}
});
ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timeTV.setText(numberPickerHour.getValue() + ":" + numberPickerMinutes.getValue() + ":" + numberPickerSeconds.getValue());
// timeTV.setText(String.format("%1$d:%2$02d:%3$02d", numberPickerHour.getValue(), numberPickerMinutes.getValue(), numberPickerSeconds.getValue()));
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt("Hours", numberPickerHour.getValue());
editor.putInt("Minutes", numberPickerMinutes.getValue());
editor.putInt("Seconds", numberPickerSeconds.getValue());
editor.apply();
alertDialog.dismiss();
}
});
alertDialog.show();
}
});
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<Android.support.constraint.ConstraintLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
Android:id="@+id/time_text_view"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Click Me"
Android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</Android.support.constraint.ConstraintLayout>
time_dialog.xml
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical">
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_margin="16dp"
Android:gravity="center"
Android:orientation="horizontal">
<NumberPicker
Android:id="@+id/numpicker_hours"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
<NumberPicker
Android:id="@+id/numpicker_minutes"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginLeft="16dp"
Android:layout_marginRight="16dp" />
<NumberPicker
Android:id="@+id/numpicker_seconds"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
</LinearLayout>
<View
Android:id="@+id/view"
Android:layout_width="match_parent"
Android:layout_height="1dp"
Android:background="#ffF0F0F0" />
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="horizontal">
<Button
Android:id="@+id/cancel"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:background="@Android:color/transparent"
Android:text="Cancel"
Android:textAllCaps="false" />
<View
Android:id="@+id/view2"
Android:layout_width="1dp"
Android:layout_height="match_parent"
Android:background="#ffF0F0F0" />
<Button
Android:id="@+id/ok"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:background="@Android:color/transparent"
Android:text="OK"
Android:textAllCaps="true" />
</LinearLayout>
</LinearLayout>