본문 바로가기
Android/Project

Spinner & DatePicker 사용해 시간/날짜 입력받기

by YOONAYEON 2021. 8. 5.
Spinner 사용

 

Spinner: 값 집합에서 하나의 값을 선택할 수 있도록 옵션제공

 

1. xml에 Spinner 추가

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="wrap_content"
        android:layout_height="44dp"
        android:layout_marginTop="20dp"
        android:scrollbarSize="6dp"
        app:layout_constraintEnd_toStartOf="@+id/textView8"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView7" />

 

2. 메인 액티비티에 코드 작성

: Adapter를 통해 스피너에 항목 제공

나는 현재 프로젝트가 Fragment를 사용한 액티비티라 메인이 아님

public class UserPeriodActivity extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.setting_period, container, false);
        Spinner sp = rootView.findViewById(R.id.spinner);
        Integer[] arr = {10, 20, 30, 40, 50, 60, 70};

        ArrayAdapter<Integer> adapter = new ArrayAdapter<Integer>(this.getContext(),
                android.R.layout.simple_spinner_item, arr);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
        sp.setAdapter(adapter);
        
        return rootView;
    }
}

 

3. 결과 화면

: 항목 간 간격을 넓히고 싶지만 그건 따로 customLayout을 만들어 지정해야 된다.

 

 

 

DatePicker

 

DatePicker: 날짜를 선택하는 뷰를 생성

- 액티비티 내부에서 사용하거나 다이얼로그창을 띄워 사용함

- startYear, endYear : 선택 가능한 년도의 범위 지정

- minDate, maxDate : 선택 가능한 날짜의 범위 지정

- calendarViewShown : 달력을 보여줄 것인지 지정. 디폴트는 true값임

- spinnersShow : 날짜를 선택하는 스피너를 보여줄 것인지 지정

 

 

1. 레이아웃 xml파일에 추가

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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"
    android:background="@color/blue4">

    <TextView
        android:id="@+id/c_layout_2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="188dp"
        android:background="@color/blue4"
        android:text="당신의 생년월일을 입력해주세요."
        android:textColor="@color/blue5"
        android:textSize="24sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <DatePicker
        android:id="@+id/datePicker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:calendarViewShown="false"
        android:datePickerMode="spinner"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/c_layout_2" />

</androidx.constraintlayout.widget.ConstraintLayout>

 

2. 메인 액티비티

: 나는 위에서 말했듯 Fragment를 상속한 액티비티이다.

public class UserBirthActivity extends Fragment {
    private int mYear, mMonth, mDay;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        Toast.makeText(this.getContext(),"UserBirth액티비티", Toast.LENGTH_SHORT).show();

        ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.setting_birth, container, false);

        Calendar calendar = new GregorianCalendar();
        mYear = calendar.get(Calendar.YEAR);
        mMonth = calendar.get(Calendar.MONTH);
        mDay = calendar.get(Calendar.DAY_OF_MONTH);

        DatePicker dp = rootView.findViewById(R.id.datePicker);
        dp.init(mYear, mMonth, mDay, mOnDateChangedListener);
        return rootView;
    }

    DatePicker.OnDateChangedListener mOnDateChangedListener = new DatePicker.OnDateChangedListener() {
        @Override
        public void onDateChanged(DatePicker datePicker, int y, int m, int d) {
            mYear = y;
            mMonth = m;
            mDay = d;
        }
    };
}

 - onDateChangedListener : 날짜 변경시에 호출됨

 

3. 결과 화면

: 다른 사람들꺼 보면 년도/월/일 순이던데 난 왜 저런지 모르겠다. 안드로이드 버전차이인가..

 

 

참고) TimePicker

 

TimePicker: 시간을 선택하는 뷰 생성

'Android > Project' 카테고리의 다른 글

[Cafe In] 기록 #2: Retrofit2  (0) 2022.03.02
[Cafe In] 기록 #1  (0) 2022.02.17
ViewPager2의 Fragment 데이터 받기 (Bundle 이용)  (0) 2021.08.07
ViewPager2 로 여러 개의 뷰 슬라이드 구현  (0) 2021.08.04
RecyclerView사용  (0) 2021.08.04