Android/StoreInfo

<정리> 자기소개 앱 구현 4

re트 2023. 12. 20. 16:33
728x90

저번 3까지는 거의 챌린지반의 내용만 들어가있었는데 오늘 과제를 제출하고 해설영상을 보고 나니까 기본 개인 과제도 보완할 점들이 생겨서 이 부분들을 정리해놓으려고 한다.

 

1. 문자열 정리

이건 저번에 적어놨던 내용인데 그건 챌린지반 과제에서만 했었고 여기에서는 안 했었다.

그래서 이번에 추가를 했다.

전에는 일일이 적었었는데 마우스를 문자열에 클릭하고 잠시 기다리면 왼쪽에 노란 전구가 뜨고 거기에서 Extract string resource를 누르고 name만 입력하면 strings.xml에 추가가 되더라

이것도 자주 쓰게 될 거 같다.

<resources>
    <string name="app_name">Introducemyself</string>
    <string name="btn_home_finish_text">종료</string>
    <string name="tv_signup_name_text">이름</string>
    <string name="edit_signup_name_hint">이름을 입력하세요.</string>
    <string name="tv_id_text">아이디</string>
    <string name="edit_id_hint">아이디를 입력하세요.</string>
    <string name="tv_password_text">비밀번호</string>
    <string name="edit_password_hint">비밀번호를 입력하세요.</string>
    <string name="btn_signup_check_text">회원가입</string>
    <string name="btn_signin_login_text">로그인</string>
    <string name="btn_signin_signup_text">회원가입</string>
    <string name="btn_signup_error_text">입력되지 않은 정보가 있습니다.</string>
    <string name="btn_login_error_text1">아이디/비밀번호를 확인해주세요</string>
    <string name="btn_login_error_text2">틀린 아이디 또는 비밀번호입니다.</string>
    <string name="btn_login_success_text">로그인 성공</string>
</resources>

 

2. selector 사용

이건 한번도 써본 적 없는 거였어서 새로웠다.

매번 drawable 폴더에서 Drawable Resource File을 만들 때마다 Root element로 설정되어있는 얘라서 뭔가 싶었는데 오늘 알게 되고 바로 사용해보게 되었다.

내가 사용한 부분은 홈화면의 종료 버튼을 눌렀을 때 버튼 색깔, 이미지 소스, 텍스트 색깔이 변하게 하는 부분이다.

selector를 사용하지 않았다면 코드상에서 setOnClickListener를 이용하지 않았을까 싶다.

특정 액션에서 변경되어야하는게 xml 상에서 수정가능한 속성이라면 이게 더 좋은 거 같다.

 

간단하게 selector에 대해 알아보면 selector는 xml형식으로 작성하여 뷰 상태값에 따라 속성값을 변화시켜줄 수 있는 요소다. 한번 만들어두면 뷰의 해당 속성에서 가져다 쓰기만 하면 되기 때문에 재사용성이 좋다. 상태값(이벤트)에는 17가지가 있지만 보통 많이 쓰는 건 5가지 정도인 듯 하다.

android:state_pressed : 눌렸는지
android:state_checked : 체크했는지
android:state_enabled : 사용가능한지
android:state_focused : 포커스있는지
android:state_selected : 선택됐는지

사용하는 방법은 간단하다. 파일을 만들고 가장 상위의 <selector> 태그 아래에 <item> 태그를 만들고 그 안에 상태에 따른 변경할 속성의 내용을 입력하면 selector를 만드는 건 끝이고 이걸 원하는 뷰의 속성에다가 넣기만 하면 된다.

 

먼저 버튼의 색깔을 바꾸는 데 사용한 selector다.

이미지와 텍스트를 자유롭게 넣기 위해 버튼 위젯을 쓰지 않고 ConstraintLayout을 썼다.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <solid android:color="@color/red"/>
            <corners android:radius="10dp"/>
        </shape>
    </item>

    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/yellow"/>
            <corners android:radius="10dp"/>
        </shape>
    </item>
</selector>

 

다음은 이미지 소스를 바꾸는 데 사용한 selector다.

상태값을 하나만 해야하는게 아니라 여러개 쓸 수 있다.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_personal_injury" android:state_pressed="true"/>
    <item android:drawable="@drawable/ic_how_reg" android:state_focused="true"/>
    <item android:drawable="@drawable/ic_paragliding"/>
</selector>

 

마지막으로 텍스트 색상을 바꾸는 데 사용한 selector다.

android:color는 자동 완성이 안 돼서 뭔가 문제가 있는 건가 싶었지만 그냥 직접 다 치니까 사용이 가능하더라

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="@color/yellow"/>
    <item android:color="@color/black"/>
</selector>

 

위의 selector들을 사용한 레이아웃 xml이다.

<androidx.constraintlayout.widget.ConstraintLayout
    android:id="@+id/btn_home_finish"
    android:layout_width="0dp"
    android:layout_height="50dp"
    android:layout_marginBottom="24dp"
    android:background="@drawable/selector_button" <-- 여기
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent">

    <ImageView
        android:id="@+id/iv_home_finish"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/btn_drawable_selector" <-- 여기
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@id/tv_home_finish"
        app:layout_constraintHorizontal_chainStyle="packed"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/tv_home_finish"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginHorizontal="10dp"
        android:text="@string/btn_home_finish_text"
        android:textColor="@drawable/btn_txt_selector" <-- 여기
        app:layout_constraintBottom_toBottomOf="@+id/iv_home_finish"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@id/iv_home_finish"
        app:layout_constraintTop_toTopOf="@+id/iv_home_finish" />
</androidx.constraintlayout.widget.ConstraintLayout>
반응형

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

LiveData에 대한 이해  (1) 2024.01.03
ViewModel에 대한 이해  (0) 2024.01.02
<정리> 자기소개 앱 구현 3  (1) 2023.12.18
<정리> 자기소개 앱 구현 2  (1) 2023.12.15
<정리> 자기소개 앱 구현  (0) 2023.12.14