반응형

 기본적으로, 액션바(Action Bar)는 여러분의 액티비 윈도우 상단에 나타납니다. 이로 인해 액티비티 레이아웃(layout)이 사용할 수 있는 총 공간을 약간 감소시킵니다. 만약, 사용자와 상호 작용 과정 동안, 여러분이 액션바를 숨기거나 보여주길 원한다면, ActionBar 객체에 있는hide() 와 show() 메소드를 호출하여 그렇게 할 수 있습니다. 어쨋든, 이로 인해 여러분의 액티비티는 새로운 사이즈에 따라 레이아웃을 새로 계산하고 다시 그리게 됩니다.


 액션바(Action Bar)가 보이거나 숨겨질 때, 여러분의 레이아웃(layout)이 리사이징(resizing) 되는 것을 막기 위해서, 여러분은 액션바를 오버레이(Overlay) 모드(mode)로 사용할 수 있습니다. 오버레이 모드(Overlay mode)에서, 시스템은 액션바를 여러분 레이아웃의 앞에 그려냄으로서 여러분의 액티비티 레이아웃이 모든 공간을 사용할 수 있도록 합니다. 오버레이 모드에서의 액션바는 화면 상단에서 레이아웃의 일부를 가리게 됩니다. 하지만 이제는 액션바를 숨기거나 보일 때, 시스템이 여러분의 레이아웃을 리사이징 하지 않고 원활하게 전환합니다. 


Tip: 만약 여러분의 레이아웃이 액션바의 뒤에 부분적으로 보여지길 원한다면, 그림 1에 보여진 것 처럼 반투명한 배경(background)을 가진 액션바의 커스텀 스타일을 만들어야 합니다. 액션바(Action Bar)의 배경(background)을 정의하는 방법에 대해 더 자세한 정보를 원한다면 개발자 사이트의 Styling the Action Bar를 참고하시기 바랍니다.


그림 1. 오버레이 모드(Overlay mode)의 갤러리(Gallery) 액션 바(Action Bar)



오버레이 모드(Overlay mode) 사용하기

------------------------------------

 액션바(Action Bar)에 오버레이 모드(overlay mode)를 사용할 수 있도록 하기 위해서는, 현재 있는 액션바 테마를 확장한(상속한) 커스텀 테마를 만들 필요가 있다. 그리고 이 테마의 android:windowActionBarOverlay 속성에 true 를 설정합니다.



Android 3.0 이상에서

 

 만약 minSdkVersion 이 11 이상으로 설정했다면, 여러분의 커스텀 테마(custom Theme)는 부모 테마로 Theme.Holo (또는 파생된 것들중 하나)를 사용해야만 합니다. 예 :


 <resources>

    <!-- the theme applied to the application or activity -->

    <style name="CustomActionBarTheme"

           parent="@android:style/Theme.Holo">

        <item name="android:windowActionBarOverlay">true</item>

    </style>

</resources>



Android 2.1 이상에서

 

 만약 Android 3.0 보다 낮은 버전에서 실행되는 디바이스와의 호환성을 위해 Support Library 이르 사용한다면, 여러분의 커스텀 테마(custom Theme)는 부모 테마로 Theme.AppCompat(또는 파생된 것들중 하나)을 사용해야만 합니다. 예 :


 <resources>

    <!-- the theme applied to the application or activity -->

    <style name="CustomActionBarTheme"

           parent="@android:style/Theme.AppCompat">

        <item name="android:windowActionBarOverlay">true</item>


        <!-- Support library compatibility -->

        <item name="windowActionBarOverlay">true</item>

    </style>

</resources>


또한 이 테마가 windowActionBarOverlay 스타일에 대한 정의를 2개 포함하고 있다는 것에 주의하시기 바랍니다. 하나는 android: 접두어를 가지고 있고 하나는 없습니다. android: 접두어를 가진 것은 플랫폼에 스타일(style)을 포함하고 있는 Android Version 입니다. 접두어가 없는 것은 Support Library 로 부터 스타일을 읽어들인 오래된 버전입니다.




레이아웃(Layout) Top-margin 지정하기

---------------------------------

 액션바가(Action Bar) 오버레이 모드(overlay mode)일때, 레이아웃의 일부가 가려진 상태로 보열질 지 모릅니다. 모든 테마들에서 각 각의 아이템들이 항상 액션바의 아래에 놓여지기 위해서는, actionBarSize 에 의해 지정된 높이(height)를 사용하여 뷰(View 들)의 상단(top)에 마진(margin) 이나 패딩(padding)을 추가해야 한다. 예:


 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:paddingTop="?android:attr/actionBarSize">

    ...

</RelativeLayout>



만약 여러분이 Support Library를 사용하여 액션바를 만들었다면, 여러분은 위 속성에서 android: 접두어를 제거할 필요가 있습니다. 예 :

 <!-- Support library compatibility -->

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:paddingTop="?attr/actionBarSize">

    ...

</RelativeLayout>


이 경우, 접두어가 없는 ?attr/actionBarSize 값은 Android 3.0 이상 을 포함한 모든 버전에서 작동합니다.

반응형

+ Recent posts