개발/Android

[프로젝트] 1일차 - 앱 바 구현

레란희 2021. 9. 8. 22:02

코틀린 공부를 할 겸 서버가 필요없는 단순한 앱을 만들어보기로 했다.

네이버에 검색하면 나오는 원판돌리기를 만들 것이다 ^▽^

오늘은 일단 시작으로 시안을 만들고 앱바를 구현하는 것까지 하였다.

 

앱바 공식문서 : 

https://developer.android.com/guide/fragments/appbar

 

AppBar 사용  |  Android 개발자  |  Android Developers

AppBar 사용 상단 앱 바는 현재 화면의 정보와 작업을 표시하기 위해 앱 창 상단을 따라 일관된 위치를 제공합니다. 그림 1. 상단 앱 바의 예 프래그먼트를 사용할 때 앱 바는 호스트 활동 또는 프

developer.android.com

 

1. 앱바 메뉴 설정하기

일단 앱바에 띄울 메뉴를 설정하기 위해 menu.xml 파일을 만들었다.

(menu.xml 파일은 res 디렉토리 내에 menu라는 디렉토리를 만들고 그 안에 생성하면 된다)

 

menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/action_save"
        android:icon="@drawable/icn_save"
        android:title="@string/action_save"
        app:showAsAction="always" />

    <item android:id="@+id/action_load"
        android:icon="@drawable/icn_load"
        android:title="@string/action_load"
        app:showAsAction="always" />

    <item android:id="@+id/action_share"
        android:icon="@drawable/icn_share"
        android:title="@string/action_share"
        app:showAsAction="always" />
</menu>

icon과 title은 이름만 봐도 뭔지 알 것이고

나는 아이콘이 항상 보이게 하고 싶어서 showAsAction을 always로 주었다.

 

 

2. Activity에 표시하기 + 클릭할 때 액션 주기

menu.xml을 작성한 다음 MainActivity.kt로 와서 

onCreateOptionsMenu 메소드를 오버라이딩해준다.

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        menuInflater.inflate(R.menu.menu, menu)
        return true
    }

마지막을 return true로 해 줘야 메뉴바가 보인다고 한다.

 

두 번째로 메뉴를 선택했을 때의 액션을 설정하기 위해 

onOptionsItemSelected를 오버라이딩한다

override fun onOptionsItemSelected(item: MenuItem): Boolean {
        return when(item.itemId) {
            R.id.action_save, R.id.action_load, R.id.action_share -> {
                Toast.makeText(this, item.title, Toast.LENGTH_SHORT).show()
                true
            }
            else -> super.onOptionsItemSelected(item)
        }
    }

item을 받아서 item의 title을 토스트로 출력하도록 하였다.

 

마지막으로 앱 바에서 Title 텍스트를 숨겨주기 위해서

onCreate의 setContentView 아래에 아래와 같이 추가한다.

supportActionBar?.setDisplayShowTitleEnabled(false)

만약 로고를 넣고 싶다면 아래처럼 설정한다. (같은 애들 쭈루룩 하는 거라 스코프 함수 사용햇음)

supportActionBar?.apply {
    setLogo(R.mipmap.ic_launcher_round)	//로고 이미지 지정
    setDisplayUseLogoEnabled(true)	//얘가 true로 해야 로고 보임
    setDisplayShowHomeEnabled(true)	//얘를 true로 해야 로고 보임22222
}

 

3. 다국어 지원

위의 menu.xml를 보면 title을 string 리소스로 사용하는 것을 볼 수 있다.

다국어 지원을 위해 그렇게 처리하였다. (다른나라 사람들이 과연 다운로드 받을지는 일단 논외로..)

다국어 지원을 위해서는 values 폴더를 따로 만들어주어야한다.

 

values-ko-rKR의 strings.xml에는 한글로 된 문자열을 써 두고

values의 string.xml에는 영어로 된 문자열을 써 두면

기기에 설정된 언어에 따라서 자동으로

언어가 한국어일때는 'values-ko-rKR'에서 리소스를 불러오고

다른 언어일 때는 values에서 리소스를 불러오게 된다.

 

와! 날먹!

 


오늘은 피그마로 시안 만드는 게 오래 걸려서 코드는 많이 만지지는 못했다.

차근차근 만들어서 내 이름 들어간 앱 하나라도 만들어봐야지 ㅜ.ㅜ