web-dev-qa-db-ja.com

TimePickerを使用して秒を選択する方法android

TimePickerを使用して、ユーザーが時間を選択できるようにしました。 ここ および ここでも を参照してください。しかし、ユーザーに2番目を選択させる方法も見つかりませんでした。これで、ユーザーは時と分を選択できますが、秒は選択できません。 02:05:10の時間を設定したい場合は、どうすればよいですか? TimePickerを使用して秒を選択する方法は?

16

最善の解決策は、Timeクラスと3つのNumberPickerを使用して、独自のTimePickerを作成することだと思います。

8
kaspermoerch

数秒のTimePickerを備えたオープンソースプロジェクトをGitHubで公開しました。

https://github.com/IvanKovac/TimePickerWithSeconds

見てください。

enter image description here

28
Majstor

迅速で汚い方法の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>
10

これを回避する最善の方法は、タイムピッカーの代わりに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>
1
Alex Carrington

これは秒付きのカスタム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>
0