143

日付と時刻を同時に選択できるAndroidウィジェットはありますか?私はすでに基本的なタイムピッカー日付ピッカーを使用しています。

しかし、彼らはそれほどセクシーでユーザーフレンドリーではありません(私は見つけました)。日付と時刻の両方を含むウィジェットが存在するかどうか知っていますか?

どうもありがとう、リュック

4

15 に答える 15

90

と の両方DatePickerTimePickerレイアウト XML に入れます。

date_time_picker.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:padding="8dp"
    android:layout_height="match_parent">

    <DatePicker
        android:id="@+id/date_picker"
        android:layout_width="match_parent"
        android:calendarViewShown="true"
        android:spinnersShown="false"
        android:layout_weight="4"
        android:layout_height="0dp" />

    <TimePicker
        android:id="@+id/time_picker"
        android:layout_weight="4"
        android:layout_width="match_parent"
        android:layout_height="0dp" />

    <Button
        android:id="@+id/date_time_set"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:text="Set"
        android:layout_height="0dp" />

</LinearLayout>

コード:

final View dialogView = View.inflate(activity, R.layout.date_time_picker, null);
final AlertDialog alertDialog = new AlertDialog.Builder(activity).create();

dialogView.findViewById(R.id.date_time_set).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

         DatePicker datePicker = (DatePicker) dialogView.findViewById(R.id.date_picker);
         TimePicker timePicker = (TimePicker) dialogView.findViewById(R.id.time_picker);

         Calendar calendar = new GregorianCalendar(datePicker.getYear(),
                            datePicker.getMonth(),
                            datePicker.getDayOfMonth(),
                            timePicker.getCurrentHour(),
                            timePicker.getCurrentMinute());

         time = calendar.getTimeInMillis();
         alertDialog.dismiss();
    }});
alertDialog.setView(dialogView);
alertDialog.show();
于 2014-03-25T06:11:47.063 に答える
54

これを提供する Android には何も組み込まれていません。

編集: Andriod は組み込みのピッカーを提供するようになりました。@Odedの回答を確認してください

于 2010-01-13T13:15:35.050 に答える
21

DatePickerupdate time メソッドでタイム ピッカー ダイアログを呼び出します。同時に呼び出されるのではなく、DatePickerセットボタンを押したときに呼び出されます。タイム ピッカー ダイアログが開きます。その方法を以下に示します。

package com.android.date;

import java.util.Calendar;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.TimePicker;

public class datepicker extends Activity {

    private TextView mDateDisplay;
    private Button mPickDate;
    private int mYear;
    private int mMonth;
    private int mDay;
    private TextView mTimeDisplay;
    private Button mPickTime;

    private int mhour;
    private int mminute;

    static final int TIME_DIALOG_ID = 1;

    static final int DATE_DIALOG_ID = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mDateDisplay =(TextView)findViewById(R.id.date);
        mPickDate =(Button)findViewById(R.id.datepicker);
        mTimeDisplay = (TextView) findViewById(R.id.time);
        mPickTime = (Button) findViewById(R.id.timepicker);

        //Pick time's click event listener
        mPickTime.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v) {
                showDialog(TIME_DIALOG_ID);
            }
        });

        //PickDate's click event listener 
        mPickDate.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                showDialog(DATE_DIALOG_ID);
            }
        });

        final Calendar c = Calendar.getInstance();
        mYear = c.get(Calendar.YEAR);
        mMonth = c.get(Calendar.MONTH);
        mDay = c.get(Calendar.DAY_OF_MONTH);
        mhour = c.get(Calendar.HOUR_OF_DAY);
        mminute = c.get(Calendar.MINUTE);
    }

    //-------------------------------------------update date---//    
    private void updateDate() {
        mDateDisplay.setText(
            new StringBuilder()
                    // Month is 0 based so add 1
                    .append(mDay).append("/")
                    .append(mMonth + 1).append("/")
                    .append(mYear).append(" "));
        showDialog(TIME_DIALOG_ID);
    }

      //-------------------------------------------update time---//    
    public void updatetime() {
        mTimeDisplay.setText(
                new StringBuilder()
                        .append(pad(mhour)).append(":")
                        .append(pad(mminute))); 
    }

    private static String pad(int c) {
        if (c >= 10)
            return String.valueOf(c);
        else
            return "0" + String.valueOf(c);


    //Datepicker dialog generation  

    private DatePickerDialog.OnDateSetListener mDateSetListener =
        new DatePickerDialog.OnDateSetListener() {

            public void onDateSet(DatePicker view, int year, 
                                  int monthOfYear, int dayOfMonth) {
                mYear = year;
                mMonth = monthOfYear;
                mDay = dayOfMonth;
                updateDate();
            }
        };


     // Timepicker dialog generation
        private TimePickerDialog.OnTimeSetListener mTimeSetListener =
            new TimePickerDialog.OnTimeSetListener() {
                public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                    mhour = hourOfDay;
                    mminute = minute;
                    updatetime();
                }
            };

        @Override
        protected Dialog onCreateDialog(int id) {
            switch (id) {
            case DATE_DIALOG_ID:
                return new DatePickerDialog(this,
                            mDateSetListener,
                            mYear, mMonth, mDay);

            case TIME_DIALOG_ID:
                return new TimePickerDialog(this,
                        mTimeSetListener, mhour, mminute, false);

            }
            return null;
        }
}

main.xml を以下に示します

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TextView  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="@string/hello"/>

    <TextView android:id="@+id/time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""/>

    <Button
        android:id="@+id/timepicker"
        android:text="Change Time" 
        android:layout_height="wrap_content" 
        android:layout_width="wrap_content"/>

    <TextView 
        android:id="@+id/date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""/>

    <Button android:id="@+id/datepicker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="200dp"
        android:text="Change the date"/>

</LinearLayout>
于 2011-03-11T04:24:42.287 に答える
13

リンクする URL は、時間ピッカーを含むダイアログと日付ピッカーを含む別のダイアログをポップアップ表示する方法を示します。ただし、独自のレイアウトでこれらの UI ウィジェットを直接使用できることに注意する必要があります。同じビューに TimePicker と DatePicker の両方を含む独自のダイアログを作成して、探しているものを実現できます。

つまり、TimePickerDialog と DatePickerDialog を使用する代わりに、UI ウィジェットのTimePickerDatePickerを独自のダイアログまたはアクティビティで直接使用するだけです。

于 2010-01-13T14:46:18.863 に答える
9

私のプロジェクトの 1 つで同じ問題に直面していたので、1 つのユーザー フレンドリーなダイアログで日付と時刻の両方を選択できるカスタム ウィジェットを作成することにしました。http://code.google.com/p/datetimepicker/でソース コードとサンプルを入手できます。コードは Apache 2.0 の下でライセンスされています。

于 2010-09-14T11:26:18.547 に答える
6

android-dateslider プロジェクトをフォーク、更新、リファクタリング、マベナイズしました。現在Githubにあります:

https://github.com/casidiablo/date-slider

于 2012-06-16T22:12:27.287 に答える
4

ここに画像の説明を入力

このチュートリアルのリンクが役立つかもしれません http://custom-android-dn.blogspot.com/2013/03/how-to-create-custom-date-time-picker.html

于 2013-03-28T16:26:15.433 に答える
2

別のオプションは、iOS の UIDatePicker ダイアログにかなり近いandroid-wheelプロジェクトです。

任意のもの (日付と時刻を含む) を選択するための垂直スライダーを提供します。水平スライダーを好む場合は、Rabi が参照する DateSlider の方が適しています。

于 2012-02-02T04:08:37.693 に答える
1

日付ピッカーと時間ピッカーを組み合わせた警告ダイアログを作成しました。https://github.com/nguyentoantuit/androidでコードを取得できます 注: DateTimePicker はライブラリです

于 2013-12-12T15:11:21.573 に答える
1

これは、ダイアログを次々に表示する Jaydeep のアイデアのよりコンパクトなバージョンです。依存関係がないため、このソリューションが気に入っています。

        Date value = new Date();
        final Calendar cal = Calendar.getInstance();
        cal.setTime(value);
        new DatePickerDialog(this,
            new DatePickerDialog.OnDateSetListener() {
                @Override public void onDateSet(DatePicker view, 
                        int y, int m, int d) {
                    cal.set(Calendar.YEAR, y);
                    cal.set(Calendar.MONTH, m);
                    cal.set(Calendar.DAY_OF_MONTH, d);

                    // now show the time picker
                    new TimePickerDialog(NoteEditor.this,
                        new TimePickerDialog.OnTimeSetListener() {
                            @Override public void onTimeSet(TimePicker view, 
                                    int h, int min) {
                                cal.set(Calendar.HOUR_OF_DAY, h);
                                cal.set(Calendar.MINUTE, min);
                                value = cal.getTime();
                            }
                        }, cal.get(Calendar.HOUR_OF_DAY), 
                            cal.get(Calendar.MINUTE), true).show();
                 }
            }, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),
            cal.get(Calendar.DAY_OF_MONTH)).show();
于 2014-03-06T07:11:20.563 に答える