컴공과컴맹효묘의블로그

Android- 액션바ActionBar와 툴바Toobar 본문

컴퓨터/Android Studio

Android- 액션바ActionBar와 툴바Toobar

효묘 2022. 3. 3. 22:43
반응형

ActionBar

화면 위쪽에 타이틀 문자열이 출력되는 곳.

<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Theme.MyApplication" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
        <!-- Primary brand color. -->
        <item name="colorPrimary">@color/purple_500</item>
        <item name="colorPrimaryVariant">@color/purple_700</item>
        <item name="colorOnPrimary">@color/white</item>
        <!-- Secondary brand color. -->
        <item name="colorSecondary">@color/teal_200</item>
        <item name="colorSecondaryVariant">@color/teal_700</item>
        <item name="colorOnSecondary">@color/black</item>
        <!-- Status bar color. -->
        <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
        <!-- Customize your theme here. -->
    </style>
</resources>

메니페스트 파일에서 테마를 설정해줍니다.

<application
        ...
        android:theme="@style/Theme.MyApplication">
  • statusBarColor: 상태 바 색상.
  • colorPrimary: 앱의 주요한 색상. 보통 배경색으로 사용
  • colorPrimaryVariant: 그림자
  • colorOnPrimary: 전경색foreground
  • colorSecondary: 보통 활성 상태를 표현

액션바 숨기기

Theme.MatrerialComponents.DayNight.NoActionBar를 상속받으면 액션바가 나오지 않는다.

<style name="Theme.MyApplication" parent="Theme.MatrerialComponents.DayNight.NoActionBar">
  ...
</style>

상속받지 못하는 상황이라면 <item>속성을 다음처럼 설정하여 액션바를 나오지 않게 할 수있다.

<style name="Theme.MyApplication" parent="Theme.MatrerialComponents.DayNight.DarkActionBar">
  ...
  <item name="windowActionBar">false</item>
  <item name="windowNoTitle">true</item>
</style>

Up 버튼 설정

업 버튼은 액티비티 화면이 앱의 첫 화면이 아닐 때 이전 화면으로 돌아가는 기능이다.

매니페스트 파일에서 설정하면 자동으로 액션 바에 업 버튼이 나온다.

<activity
          android:name=".TwoActivity"
          android:parentActivityName=".MainActivity"></activity>

업 버튼 이벤트

액티비티에 onSupportNavigateUp()을 오버라이딩 하면 된다.

override fun onSupportNavigateUp(): Boolean {
    Log.d("MyLog", "onSupportNavigateUp")
    return super.onSupportNavigateUp()
}

Up button by programmatically

parentActivityName속성을 선언하지 않고 액티비티 코드로 업 버튼이 나오게 하는 방법이다. 이 방법은 뒤로 가는 알고리즘을 따로 공부해야한다.

class SecondActivity: AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        ...
        supportActionBar?.setDisplayHomeAsUpEnabled(true)
    }

    override fun onSupportNavigateUp(): Boolean {
        Log.d("MyLog", "onSupprotNavigateUp")
        onBackPresssed()
        return super.onSupportNavigateUp()
    }
}

메뉴 구성

메뉴는 액션바의 중요한 구성 요소이다.

  • onCreateOptionsMenu(): 메뉴를 추가합니다. 액티비티가 실행되면서 한 번만 호출됩니다.
  • onPrepareOoptionsMenu(): 오버플로 메뉴가 나타날 때마다 반복해서 호출됩니다.
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    val mItem1: MenuItem? = menu?.add(0, 0, 0, "menu1")
    val mItem2: MenuItem? = menu?.add(0, 1, 0, "menu2")
    return super.onCreateOptionsMenu(menu)
}

메뉴를 선택했을 때 이벤트 처리

override fun onOptionsItemSelected(item: MenuItem): Boolean = when(item.itemId) {
    // 단일 표현식 함수
    0 -> {
        TODO()
    }
    1 -> {
        TODO()
    }
    else -> super.onOptionsItemSelected(item)
}

리소스로 구현. add로 추가하지 않고 리소스에서 처리한다.

<menu xmlns:android"..."
      ... >
  <item
        android:id="@+id/menu1"
        android:title="menu1"/>
  <item
        android:id="@+id/menu2"
        android:icon="@android:drawable/ic_menu_add"
        android:title="menu2"
        app:showAsAction="always"/>
  <item
        android:id="@+id/menu3"
        android:icon="@android:drawable/ic_menu_search"
        android:title="menu3"
        app:showAsAction="ifRoom"/>
</menu>

showAsAction속성들은 다음이 있다.

  • never: default값. 항상 오버플로우 메뉴로 출력한다.
  • ifRoom: 액션바에 공간이 있다면 액션 아이템으로, 없다면 오버플로로 출력.
  • always: 항상 액션 아이템으로 출력.

액티비티에 적용하려면 다음과 같이 한다.

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

menuInflaterMenuInflater타입의 속성이며 이 객체의 inflate()함수에 매개변수로 메뉴 XML파일을 명시하면 액티비티에 메뉴가 적용된다.

액션 바- 액션 뷰ActionView

액션 뷰는 액션바에서 특별한 기능을 제공한다. 대표적으로 androidx.appcompat.widget.SearchView가 있다.

ToolBar

ToolBar는 액션바와 거의 같다. 액션바는 액티비티 창이 자동으로 출력하는 액티비티의 요소이지만, 툴바는 개발자가 직접 제어하는 뷰라는데 차이가 있다.

툴바는 androidx.appcompat.widget.Toolbar클래스를 이용하면 된다.

툴바를 사용하려면 ActionBar를 나오지 않게 설정해주어야한다. 그리고 레이아웃에 툴바를 추가한 후, setSupportActionBar(binding.toolbar)를 해주어야한다.

<androidx.appcompat.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    style="@style/Widget.MaterialComponents.Toolbar.Primary" />
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        ...
        setSupportActionBar(binding.toolbar)
    }
}
반응형

'컴퓨터 > Android Studio' 카테고리의 다른 글

Android- DrawerLayout  (0) 2022.03.09
Android- RecyclerView 라이브러리  (0) 2022.03.05
Android- 플랫폼API, 제트팩 라이브러리  (0) 2022.03.03
Android- platfrom architecture  (0) 2022.03.03
Android- viewBinding  (0) 2022.03.02
Comments