CheckBox나 Switch등은 클릭 이벤트가 발생하면 체크가 되거나 스위치가 온오프되는 편리한 기능을 가지고 있습니다.
보통은 아래와 같이 사용합니다.
mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
mCheckBox.setChecked(isChecked);
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked) {
//TODO check true
} else {
//TODO check false
}
}
});
별다른 처리를 하지 않더라도 편리하게 사용할 수 있는 이 기능은,
스위치나 체크박스를 선택 -> 특정 기능의 on/off 의 순서로 기능을 구현 할 때는 굉장히 편리하지만
스위치나 체크박스를 선택 -> 특정기능을 설정하는 Dialog등을 띄움 -> 특정 기능의 on/off
와 같이 중간에 한단계를 더 거치게 된다면 굉장히 번거롭게 됩니다.
온오프로 바로 상태가 변하게 되기 때문에 dialog와 같은 중간단계에서 해당 기능 설정을 하지 않거나 하게되어도
스위치나 체크박스는 온오프로 변하기 때문입니다.
즉 체크박스와 스위치는 오직 상태를 표시하는 readOnly로 사용할 수 있도록 만들어야 하는데
넷에서는 아래와 같이 xml에
android:enabled="false"
<androidx.appcompat.widget.AppCompatCheckBox
android:enabled="false"
android:checked="false"
android:id="@+id/check_readonly"
android:layout_height="match_parent"
android:layout_width="match_parent"
/>
옵션을 부여하면 기능 구현을 할 수 있다고 하는데,
이렇게 하니 체크박스의 상태는 변하지 않았으나
체크박스에 onCheckedChangeLister나 onClickListener를 붙여도 작동하지 않았습니다.
때문에.. 해당 기능 구현을 위해서 아래와 같이 기능을 구현 해 줍니다.
xml 레이아웃에서 체크 박스에 onClick 이벤트가 발생하지 않도록, 체크박스를 덮는 FrameLayout을 만들어주고
FrameLayout에 onClickListener를 달아서 해당 기능을 구현 해 주었습니다.
<RelativeLayout
android:layout_width="36dp"
android:layout_height="36dp"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatCheckBox
android:checked="false"
android:id="@+id/check_readonly"
android:layout_height="match_parent"
android:layout_width="match_parent"
/>
<FrameLayout
android:id="@+id/check_button"
android:focusable="true"
android:clickable="true"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
CheckBox mCheckBox = findViewById(R.id.check_readonly);
FrameLayout mCheckbutton = itemView.findViewById(R.id.check_button);
mCheckbutton.setOnClickListener(v -> {
setCheckListener();
});
public void setAlarmCheckListener() {
if(mCheckBox.isChecked()) {
//TODO 체크박스가 체크되어 있을 때
} else {
//TODO 체크박스가 체크되어 있지 않을 때
}
}
작업 수행후에는 mCheckBox.setChecked(true); 등을 통해서 체크상태를 변경 해 주면 됩니다.
'Android > Dev' 카테고리의 다른 글
A failure occurred while executing com.android.build.gradle.--- 빌드 or APK 생성시 해당 오류가 발생할 때 (2) | 2020.12.09 |
---|---|
webview의 loadData 사용 시 화면에 아무것도 나타나지 않을때 (0) | 2020.07.20 |
기기의 지역(Locale) 판별 및 리소스 사용하기, 국가코드와 언어코드 (0) | 2020.05.28 |
NestedScrollView - ScrollView 와 RecyclerView 사용시의 오류 해결 (2) | 2020.04.23 |
Google Drive API 사용시 untitled 파일만 생성될 때 (0) | 2020.04.14 |
댓글