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 |