프로그래밍/안드로이드

안드로이드 - 날짜 대화상자 시간 대화상자 만들기

가카리 2015. 8. 9. 16:54
반응형

 

XML에서 정의하는 DatePicker와 TimePicker와 동일한 모양으로 원할 때 언제든지 호출하고 싶다면

 

DatePickerDialog와 TimePickerDialog를 사용하면 된다.

 

다음 예제를 보면 버튼을 2개 만들어두고 날짜 대화 상자버튼을 누르면

 

 

다음과 같이 날짜 대화상자가 나온다.

 

 

시간 대화상자를 누르면 시간 대화상자가 나온다.

 

 

 

 

XML 를 보면 단순히 버튼과 텍스트뷰만 배치되어있다.

 

activity_picker_dialog_test.xml파일

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

    android:orientation="vertical"

 

>

 

    <Button

     android:id="@+id/btnchangedate"

     android:layout_width="wrap_content"

     android:layout_height="wrap_content"

     android:onClick="mOnClick"

     android:text="날짜 대화상자"

    />

    <TextView

     android:id="@+id/txtdate"

     android:layout_width="wrap_content"

     android:layout_height="wrap_content"

     android:textSize="20sp"

     android:text="date"

/>

    <Button

     android:id="@+id/btnchangetime"

     android:layout_width="wrap_content"

     android:layout_height="wrap_content"

     android:onClick="mOnClick"

     android:text="시간 대화상자"

     />

    <TextView

     android:id="@+id/txttime"

     android:layout_width="wrap_content"

     android:layout_height="wrap_content"

     android:textSize="20sp"

     android:text="time"

     />

</LinearLayout>

 

 

눌린 버튼에 따라 다이얼로그를 다르게 만들고 값을 받아서 텍스트뷰에 반영하기 위한 리스너 등록만 간단히 되있는 예제이다.

PickerDialogTest.java 파일

 

package com.example.ch13_pickerdialog;

 

import java.util.Calendar;

import java.util.GregorianCalendar;

 

import android.app.Activity;

import android.app.DatePickerDialog;

import android.app.TimePickerDialog;

import android.os.Bundle;

import android.view.View;

import android.widget.DatePicker;

import android.widget.TextView;

import android.widget.TimePicker;

 

 

public class PickerDialogTest extends Activity {

    int mYear, mMonth, mDay, mHour, mMinute;

    TextView mTxtDate;

    TextView mTxtTime;

    

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_picker_dialog_test);

      

        //텍스트뷰 2 연결

        mTxtDate = (TextView)findViewById(R.id.txtdate);

        mTxtTime = (TextView)findViewById(R.id.txttime);

        

        //현재 날짜와 시간을 가져오기위한 Calendar 인스턴스 선언

        Calendar cal = new GregorianCalendar();

        mYear = cal.get(Calendar.YEAR);

        mMonth = cal.get(Calendar.MONTH);

        mDay = cal.get(Calendar.DAY_OF_MONTH);

        mHour = cal.get(Calendar.HOUR_OF_DAY);

        mMinute = cal.get(Calendar.MINUTE);

        

        UpdateNow();//화면에 텍스트뷰에 업데이트 해줌.

    }

 

    public void mOnClick(View v){

        switch(v.getId()){

            //날짜 대화상자 버튼이 눌리면 대화상자를 보여줌

            case R.id.btnchangedate:

                //여기서 리스너도 등록함

                new DatePickerDialog(PickerDialogTest.this, mDateSetListener, mYear,

                        mMonth, mDay).show();

                break;

                

            //시간 대화상자 버튼이 눌리면 대화상자를 보여줌

            case R.id.btnchangetime:

                //여기서 리스너도 등록함

                new TimePickerDialog(PickerDialogTest.this, mTimeSetListener, mHour,

                        mMinute, false).show();

                break;

        }

    }

    

    //날짜 대화상자 리스너 부분

    DatePickerDialog.OnDateSetListener mDateSetListener =

            new DatePickerDialog.OnDateSetListener() {

                

                @Override

                public void onDateSet(DatePicker view, int year, int monthOfYear,

                        int dayOfMonth) {

                    // TODO Auto-generated method stub

                    //사용자가 입력한 값을 가져온뒤

                    mYear = year;

                    mMonth = monthOfYear;

                    mDay = dayOfMonth;

                    //텍스트뷰의 값을 업데이트함

                    UpdateNow();

                }

            };

    

    //시간 대화상자 리스너 부분

    TimePickerDialog.OnTimeSetListener mTimeSetListener =

            new TimePickerDialog.OnTimeSetListener() {

                

                @Override

                public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

                    // TODO Auto-generated method stub

                    //사용자가 입력한 값을 가져온뒤

                    mHour = hourOfDay;

                    mMinute = minute;

                    

                    //텍스트뷰의 값을 업데이트함

                    UpdateNow();

                    

                }

            };

            

    //텍스트뷰의 값을 업데이트 하는 메소드

    void UpdateNow(){

        mTxtDate.setText(String.format("%d/%d/%d", mYear,

                mMonth + 1, mDay));

        mTxtTime.setText(String.format("%d:%d", mHour, mMinute));

    

    }

    

}