반응형
다음과 같이 정렬버튼을 누르면
이렇게 나타나는 창을 구현해보고자 한다.
1) 버튼 xml
<Button
android:checked="false"
android:id="@+id/sortBtn"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@drawable/sort_button"
android:textColor="@drawable/selector_radio_text"
android:button="@null"
android:textAlignment="center"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:layout_marginRight="11dp"
android:layout_marginLeft="10dp"
android:text="가나다 순 정렬"
android:layout_gravity="right|bottom"
tools:ignore="RtlCompat" />
한편 background와 textColor xml은 다음과 같다.
background
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true">
<shape android:shape="rectangle">
<solid android:color="@color/colorBlackSub" />
<stroke android:width="2dp" android:color="@color/colorBlackSub" />
<corners android:radius="5dp"/>
</shape>
</item>
<item android:state_checked="false">
<shape android:shape="rectangle">
<solid android:color="#CAE5FB" />
<stroke android:width="2dp" android:color="@color/colorBlackSub" />
<corners android:radius="5dp"/>
</shape>
</item>
</selector>
textColor
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:color="#FFFFFF">
</item>
<item android:state_checked="false" android:color="@color/colorBlackSub">
</item>
</selector>
2) 버튼과 메뉴화면 구현
//변수
final int[] checkedItem = {0};
sortBtn = v.findViewById(R.id.sortBtn);
sortBtn.setOnClickListener(view -> {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity());
//alertDialog.setIcon(R.drawable.image_logo);
alertDialog.setTitle("정렬 기준을 선택하세요.");
final String[] listItems = new String[]{"가나다 순", "최신 순", "오래된 순"};
alertDialog.setSingleChoiceItems(listItems, checkedItem[0], (dialog, which) -> {
checkedItem[0] = which;
sortBtn.setText(listItems[which] + " 정렬");
blva.clear();
getBook(
String.valueOf(svBox.getQuery()),
check1.isChecked(),
curr_tag1[0],
which
);
dialog.dismiss();
});
alertDialog.setNegativeButton("닫기", (dialog, which) -> {
});
AlertDialog customAlertDialog = alertDialog.create();
customAlertDialog.show();
});
여기서 중요한 부분은 다음과 같다.
2-1) 버튼 선언과 클릭 이벤트 생성
sortBtn = v.findViewById(R.id.sortBtn);
sortBtn.setOnClickListener(view -> {
2-2) 메뉴 화면 선언
AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity());
alertDialog.setTitle("정렬 기준을 선택하세요.");
2-3) 메뉴 선택시 이벤트
alertDialog.setSingleChoiceItems(listItems, checkedItem[0], (dialog, which) -> {
checkedItem[0] = which;
sortBtn.setText(listItems[which] + " 정렬");
blva.clear();
getBook(
String.valueOf(svBox.getQuery()),
check1.isChecked(),
curr_tag1[0],
which
);
dialog.dismiss();
});
2-4) 구현된 메뉴 화면 보여주게끔 하기
AlertDialog customAlertDialog = alertDialog.create();
customAlertDialog.show();
반응형
'PHP' 카테고리의 다른 글
[정규표현식] 개행문자를 여러번(1~n번)포함한 문자열 추출하기 (0) | 2023.09.05 |
---|---|
[Android] Html.fromHtml 메소드 사용하기 (특수문자, 테그 문자를 변환 및 처리해주기) (0) | 2023.09.04 |
[Android] LinearLayout에서 왼쪽/오른쪽 배치 시키기(layout_gravity 속성과 view 엘리먼트 넣어주기) (0) | 2023.09.04 |
[JAVA] 괄호 안의 특정 문자열 추출 방법 (정규식 regexp 사용) , 숫자인지 문자열인지 판별 방법 (0) | 2023.08.30 |
FirebaseInstanceId deprecated (FirebaseMessaging으로 바꿔주기) (0) | 2023.08.28 |