안드로이드

[Android Kotlin] 안드로이드 코틀린 Action Bar

행복하개! 2020. 3. 26. 22:39

Action Bar는 안드로이드에서 많은 기능을 제공하고 있다. 이번 포스팅에서는 기본적인 부분만 먼저 보도록 하려고 한다.

 

main_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/Item1"
        android:title="Item1" />
    <item
        android:id="@+id/Item2"
        android:icon="@drawable/ic_launcher_foreground"
        android:title="Item2"
        app:showAsAction="always" />
    <item
        android:id="@+id/Item3"
        android:icon="@android:drawable/ic_lock_idle_alarm"
        android:title="Item3"
        app:showAsAction="always|withText" />
    <item
        android:id="@+id/Item4"
        android:icon="@android:drawable/ic_dialog_info"
        android:title="Item4"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/Item5"
        android:icon="@android:drawable/ic_menu_search"
        android:title="Item5"
        app:showAsAction="always|collapseActionView"
        app:actionViewClass="androidx.appcompat.widget.SearchView"/>
</menu>

 

먼저 메뉴xml을 만들고 나면, app:showAsAction을 주목하자. 

 

이것은 ..?

1. ifRoom : 상단 툴바에 공간이 존재하면 아이콘으로 보여줘라!

2. always : 무조건 보여줘

3. never : 상단 앱바에 절대 뿌리지 않겠어.

4. collapseActionView : 접었다 폈다하며 뷰를 표시하겠어.

5. withText : 비어있는 공간에 한해서 text도 같이 뿌리겠어!

 

라고 보면 된다. 

 

1. 세로모드 일때
2. 가로모드 일때

 

이런식으로 아이콘을 배치하거나 보이거나 .. 가능해진다. 직접해보는게 훨씬 이해하기 빠를 것이다. 눈으로만 보는 것은 절대 공부가 안된다!

 

 

 

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

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

        var search_item:MenuItem? = menu?.findItem(R.id.Item5)
        var search_view: SearchView = search_item?.actionView as SearchView

        search_view.queryHint = "검색어를 입력해주세요."

        search_view.setOnQueryTextListener(object : SearchView.OnQueryTextListener{
            // 입력 완료됬을때
            override fun onQueryTextSubmit(query: String?): Boolean {
                tv1.text = query
                // true하면 키보드가 안내려감
                return false
            }

            // 입력할때마다 반응하는
            override fun onQueryTextChange(newText: String?): Boolean {
                tv2.text = newText
                // true하면 키보드가 안내려감 근데 입력 도중이라 그다지 상관은 없음
                return false
            }

        })

        return super.onCreateOptionsMenu(menu)
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        when (item.itemId) {
            R.id.Item1 ->
                tv1.text = "menu1"
            R.id.Item2 ->
                tv1.text = "menu2"
            R.id.Item3 ->
                tv1.text = "menu3"
            R.id.Item4 ->
                tv1.text = "menu4"
        }
        return super.onOptionsItemSelected(item)
    }
}

 

그리고 안드로이드에서 기본으로 제공하는 SearchView가 있는데 (찾아보면 여러가지가 많다.) ActionBar를 활용해서 서치바를 만들 수도 있다.

 

SearchView를 활용한 예

 

활용은 다양하게 가능하다. 기본을 알면 응용하는 것은 그리 시간이 오래 걸리지 않으니 꼭 기본을 공부하도록 하자.