안드로이드 액션바(ActionBar) 기본 사용법. (Android ActionBar)

2017. 11. 14. 14:21


1. 안드로이드 액션바(ActionBar)와 앱바(App Bar)

액션바(ActionBar)앱바(App Bar)를 만들 때 사용하는 위젯 중 하나입니다. 그리고 앱바(App Bar)는 액티비티의 제목과 앱 레벨의 탐색(navigation)을 위한 액션 버튼 또는 여러 종류의 위젯으로 구성된 액티비티의 기본 도구모음(Toolbar)을 말합니다.

안드로이드 액션바(ActionBar)


통상적으로 안드로이드에서 앱바(App Bar)와 액션바(ActionBar)는 같은 의미로 사용됩니다. 초기 머티리얼 디자인에서 앱바(App Bar) 레이아웃 구조가 ActionBar 위젯을 통해 구현되었기 때문에 액션바(ActionBar)는 곧 앱바(App Bar)를 의미하죠.


그런데 안드로이드 SDK가 지속적인 발전과 수정을 거쳐옴에 따라 앱바(App Bar)를 만드는 방법 또한 변화되었습니다. 즉, 앱바(App Bar)를 만들기 위해 반드시 ActionBar 위젯을 사용할 필요가 없어진 것입니다. 특히, 최근에는 v7 AppCompat 지원 라이브러리에 포함된 Toolbar를 사용하여 앱바(App Bar)를 구현합니다. 지원 라이브러리의 Toolbar를 사용하면, 다양한 종류의 기기에서 일관적인 앱바(App Bar) 동작을 보장할 수 있습니다.


하지만 v7 AppCompat 지원 라이브러리의 Toolbar를 사용하는 방법을 설명하기에 앞서, ActionBar 위젯으로 앱바(App Bar)를 만드는 방법을 먼저 설명하는 것이 흐름상 적절하다고 생각합니다. 기본적으로 액티비티 내부에서 앱바(App Bar)가 ActionBar 위젯으로 관리되고, 앱바(App Bar)를 제어하는 기능들이 ActionBar 클래스를 통해 제공되기 때문입니다.

1.1 앱바(App Bar)의 레이아웃 구조.

앱바(App Bar)는 기본적으로 화면을 왼쪽/오른쪽 두 부분으로 나눈 다음, 왼쪽에는 탐색에 사용되는 "Nav icon"과 현재 컨텐츠의 제목을 출력하는 "Title"을 표시합니다. 그리고 오른쪽에는 앱의 주요 액션을 버튼 형태로 제공하는 "Action", 주요 액션에 표시되지 않은 기능과 메뉴 아이템들을 보여주기 위한 "Overflow menu" 아이콘이 표시됩니다.

안드로이드 앱바(App Bar) 기본 레이아웃


2. 액션바(ActionBar) 사용법.

안드로이드 3.0(API Level 11)부터, 기본 테마를 사용하는 모든 액티비티에서 ActionBar가 앱바(App Bar)로 사용됩니다. 앱바(App Bar)는 액티비티에 기본으로 포함된 요소이기 때문에, 레이아웃 리소스 XML 파일에 ActionBar위젯을 별도로 추가하지 않아도, 간단한 설정만으로 액티비티에서 앱바(AppBar)가 표시되도록 만들 수 있습니다.

2.1 앱바(App Bar) 표시하기.

앱바(App Bar)가 화면에 표시되도록 만들기 위해서는, 액티비티가 앱바(App Bar)를 표시하는 테마를 사용하도록 설정하기만 하면 됩니다. 그리고 안드로이드 3.0(API Level 11)부터는 기본 테마들이 앱바(App Bar)를 제공하기 때문에, 아래의 코드와 같이, 앱의 테마 설정을 기본 테마 중 하나로 지정하면, 앱바(App Bar)를 사용하도록 만들 수 있습니다.

"/manifests/AndroidManifest.xml" - 앱 프로젝트의 테마 설정.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ppottasoft.actionbarexample">

    <application
        ...
        android:theme="@style/AppTheme">
        ...
    </application>
</manifest>
"/res/values/styles.xml" - 앱바(App Bar)가 포함된 테마 지정.
<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        ...
    </style>
</resources>

안드로이드 앱바(App Bar) 사용 테마 설정


그런데 어떤 경우에는 앱바(App Bar)를 사용하지 않게 만들고 싶을 때도 있습니다. 이를 위해서는 액티비티에 액션바를 지원하지 않는 테마를 지정하면 됩니다. 바로 "NoActionBar" 테마입니다.

"/res/values/styles.xml" - 앱바(App Bar)를 사용하지 않는 테마 지정.
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

안드로이드 앱바(App Bar) NoActionBar


2.2 앱바(App Bar) 액세스하기.

적절한 테마 설정으로 앱바(App Bar)가 화면에 표시되도록 만들고 나면, 액티비티에서 getSupportActionBar() 함수를 호출하여 앱바(App Bar)에 대한 참조를 획득할 수 있습니다. 이 때, getSupportActionBar() 함수에서 리턴되는 타입은 ActionBar(android.support.v7.app.ActionBar) 클래스입니다.


    ActionBar ab = getSupportActionBar() ;

getSupportActionBar() 함수를 통해 액티비티의 ActionBar 객체에 대한 참조를 획득하고나면, ActionBar 클래스에서 제공하는 함수를 통해 앱바(App Bar)의 표시항목을 설정하거나 앱바(App Bar)가 제공하는 여러 기능을 사용할 수 있습니다.

2.3 앱바(App Bar) 제목 텍스트 변경하기.

앱바(App Bar)에 표시되는 제목 텍스트에는 기본적으로 앱의 이름, 즉, AndroidManifest.xml 파일의 "android:label"에 지정된 문자열이 표시됩니다. 그러므로 앱바(App Bar)의 title 영역에 표시되는 텍스트를 변경하기 위해서는 "android:label"의 값을 수정하면 됩니다.

"/manifests/AndroidManifest.xml" - 앱바(App Bar)에 표시되는 제목 텍스트.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ppottasoft.actionbarexample">

    <application
        ...
        android:label="@string/app_name"
        ...
    </application>
</manifest>
"/res/values/strings.xml" - 앱바(App Bar) 제목 텍스트 변경.
<resources>
    <string name="app_name">Changing ActionBar Text</string>
</resources>

앱바(App Bar) 제목 텍스트 변경


하지만 앱바(App Bar)의 제목 텍스트를 앱의 이름으로 고정시키는 경우는 거의 없죠. 대신, 현재 수행중인 작업에 따라 앱바(App Bar)의 제목 텍스트를 바꿔가면서 표시하는 경우가 많습니다. 이렇게 앱바(App Bar)의 제목 텍스트를 임의의 문자열로 지정하기 위해서는 setTitle() 함수를 사용합니다.

    ActionBar ab = getSupportActionBar() ;
    ab.setTitle("ActionBar Title by setTitle()") ;

앱바(App Bar) setTitle() 제목 텍스트 변경


2.4 앱바(App Bar)의 색상 변경하기.

앱바(App Bar)가 화면에 표시될 때는 액티비티의 테마에 따라 그 색상이 결정됩니다. 그러므로 앱바(App Bar)의 색상을 변경하려면, 테마에 설정된 색상 값을 바꿔주면 됩니다.


프로젝트의 "AndroidMenifest.xml" 파일의 내용을 보면 "android:theme"에 앱의 테마가 지정된 것을 확인할 수 있습니다. 그런데 "android:theme"에는 시스템에서 제공하는 테마가 바로 사용되지 않고, 스타일(Style) 리소스의 "AppTheme"가 지정되어 있습니다.

    ...
    <application
        ...
        android:theme="@style/AppTheme">
        ...
    </application>

"/res/values/styles.xml" 파일을 열어보면 "AppTheme"에 대한 내용을 확인할 수 있는데요. 소스의 내용은, "AppTheme"가 "Theme.AppCompat.Light.DarkActionBar"를 상속받았으며, "colorPrimary", "colorPrimaryDark", "colorAccent"를 커스터마이징하고 있다는 내용입니다.

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
</resources>

바로 여기서, "AppTheme"의 설정 값을 사용하여 앱바(App Bar)의 색상을 변경할 수 있습니다. 그럼 이제 테마 설정 값이 어떤 화면에 영향을 주는지 알아야 하는데요. 아래 그림을 통해 테마 설정 값과 화면 요소의 관계를 확인할 수 있습니다. (좀 더 자세한 내용은 https://developer.android.com/training/material/theme.html?hl=ko#ColorPalette 페이지를 참고하세요.)

앱바(App Bar) 요소와 테마 설정 값의 관계


자, 이제 앱바(App Bar)의 각 요소에 대한 색상을 어떻게 변경해줘야 하는지 아시겠죠? 아래 예제는 오렌지(Orange) 색상으로 앱바(App Bar)의 색을 변경한 예제입니다.

"/res/values/colors.xml" - 앱 테마 색상 변경.
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#FF9800</color>
    <color name="colorPrimaryDark">#E65100</color>
    <color name="colorAccent">#FF4081</color>
</resources>

앱바(App Bar) 색상 변경


https://developer.android.com/training/material/theme.html?hl=ko#ColorPalette 의 그림을 보면, "textColorPrimary"를 사용하여 앱바(App Bar) 제목 텍스트의 색상을 변경하는 것으로 나와 있습니다. 하지만 실제로 "textColorPrimary"를 사용하면, "Error:(312, 21) No resource found that matches the given name: attr 'textColorPrimary'."라는 에러가 발생합니다.

2.5 앱바(App Bar)에 액션(Action) 추가하기

2.5.1 앱바(App Bar) 액션을 위한 메뉴 리소스 XML 작성하기.

앱바(App Bar)에는 사용자 액션을 위한 버튼을 추가할 수 있습니다. 통상적으로 이 버튼을 액션 버튼(Action Button) 또는, 간단히 액션(Action)이라고 부르는데, 앱의 현재 상황에서 가장 중요한 기능들을, 이 액션 버튼이 눌려졌을 때 실행되도록 만듭니다.


앱바(App Bar)는 가로 방향 공간에 대한 제한으로 인해 한정된 수의 액션 버튼만 표시할 수 있습니다. 특히, 화면이 작은 스마트폰의 경우에는 그 갯수가 더욱 제한적일 수 밖에 없죠. 그런데 만약, 앱바(App Bar)에 표시할 수 있는 갯수보다 많은 수의 액션(Action)이 정의되면 어떻게 될까요? 분명, 중요하다고 판단된 액션(Action)이므로 어떤 형태로든 기능을 사용할 수 있게 만들어줘야 할텐데 말이죠.


이런 경우, 앱바(App Bar)에 버튼으로 표시되지 못한 액션들은, 앱바(App Bar) 설정에 따라 오버플로우 메뉴(Overflow Menu)에 추가됩니다. 물론, 처음부터 액션(Action)이 아닌 오버플로우 메뉴에 고정적으로 표시되게 만들 수도 있습니다.

앱바(App Bar)의 액션 버튼과 오버플로우 메뉴


액션 버튼과 오버플로우 메뉴에 추가되는 액션은 메뉴 리소스 XML에 정의합니다. 메뉴 리소스 XML은 "/res/menu/"에 생성하는데, xml 파일을 만든 다음, "<menu>" 요소 아래에 액션 당 하나의 "<item>"을 사용하여 앱바(App Bar)에 표시될 액션을 추가합니다.


아래 코드는 메뉴 리소스 XML에 "actionbar_actions.xml"이라는 파일을 생성한 다음, 액션을 정의한 예제입니다.

"/res/menu/actionbar_actions.xml" - 앱바에 액션 추가하기.
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/action_search"
        android:icon="@drawable/ic_search_white_48dp"
        android:title="Search"
        app:showAsAction="ifRoom"/>

    <item
        ... />

</menu>

메뉴 리소스 XML에서 액션을 정의하기 위해 사용되는 "<item>" 요소의 속성들은 그 의미를 비교적 직관적으로 파악할 수 있습니다. 사용자에 의해 액션이 실행될 때 이벤트 핸들러에서 액션 식별에 사용되는 "id", 앱바(App Bar)의 액션 버튼에 표시될 Drawable 리소스를 지정하기 위한 "icon", 그리고 액션 또는 오버플로우 메뉴에 표시될 텍스트를 의미하는 "title". 이와 같이, 속성의 이름만으로도 그 용도를 쉽게 파악할 수가 있죠.


그런데 마지막 속성은 그 의미가 쉽게 와닿지 않습니다. "showAsAction", 어떤 역할을 하는 속성일까요?


"showAsAction" 속성은, 그 이름에 포함된 단어가 의미하듯, 아이템을 "액션으로 보여줄 때"의 옵션을 나타냅니다. 즉, 지정된 값에 따라 아이템을 "어떻게" 표시할지가 결정되는 것이죠. 먼저, "showAsAction"에 사용할 수 있는 값들은 어떤 것들이 있는지 한번 볼까요? 아래 표를 보시죠.


showAsAction 값 의미
always 아이템을 항상(always) 앱바(App Bar)의 액션으로 표시.
never와 ifRoom보다 우선되며, 공간이 없으면 표시되지 않음.
never 아이템을 앱바(App Bar)의 액션으로 표시하지 않고(never) 오버플로우 메뉴에 바로 표시.
ifRoom 만약 공간이 있다면(ifRoom), 앱바(App Bar)의 액션으로 표시하고, 공간이 없다면 오버플로우 메뉴에 표시.
withText 아이템을 앱바(App Bar)의 액션으로 표시할 때 텍스트와 같이(withText) 표시.
단, 아이콘과 텍스트를 같이 표시할 공간이 있는 경우에만 텍스트 표시.
collapseActionView 아이템에 커스텀 액션 뷰가 지정된 경우, 축소된 형태로 표시.

지정된 값을 속성 이름의 뒤에 붙여보면 그 의미를 좀 더 쉽게 이해할 수 있습니다. "show as action always", "show as action with text" 처럼 말이죠.


showAsAction 속성 값에 따른 표시 결과는 아래 그림을 통해 확인할 수 있습니다.

showAsAction 값에 따른 동작


"collapseActionView" 값에 대한 내용은, 그 설명이 조금 길어질 수 있기 때문에, 다른 글을 통해 설명하겠습니다.

2.5.2 메뉴 리소스 XML을 앱바(App Bar)에 표시하기.

원하는 구성으로 메뉴 리소스 XML을 작성했다면, 작성한 메뉴 리소스 XML이 앱바(App Bar)에서 사용되도록 만들어야 합니다. 이는 액티비티의 onCreateOptionsMenu() 함수를 오버라이딩한 다음, 앞서 작성한 메뉴 리소스 XML을 inflate함으로써 이루어집니다. 음, 앱바(App Bar)를 설명하는데, 갑자기 웬 "OptionsMenu"가 나올까요?


안드로이드에서 "옵션 메뉴(Options Menu)"는 액티비티의 기본 메뉴를 의미합니다. 액티비티가 실행된 후, 현재 액티비티 컨텍스트와 관련된 작업(예. Search, Settings) 등이 바로 이 "옵션 메뉴(Options Menu)"에 표시되는 것이죠.


이전 안드로이드 버전 2.3.x(API Level 10) 이하에서는 사용자가 "Menu" 버튼을 눌렀을 때 별도의 메뉴 항목으로 "옵션 메뉴(Options Menu)"가 표시되었습니다. 하지만 안드로이드 버전 3.0(API Level 11) 이상부터는 "옵션 메뉴(Options Menu)" 항목이 앱바(App Bar)에 표시되도록 바뀌었죠. 그래서 onCreateOptionsMenu() 함수가 앱바(App Bar)에 메뉴 리소스 XML을 표시하는데 사용되는 것입니다.

onCreateOptionsMenu() 함수


onCreateOptionsMenu() 함수에서 메뉴 리소스 XML을 앱바(App Bar)에 표시하는 코드는 아래와 같습니다.

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.actionbar_actions, menu) ;

        return true ;
    }

onCreateOptionsMenu() 함수와 menu 리소스 ID


참고로, 작성된 메뉴 아이템이 표시되도록 만드려면, onCreateOptionsMenu() 함수가 반드시 true를 리턴해야 합니다. false를 리턴하면, 메뉴가 표시되지 않습니다.

2.6 앱바(App Bar) 액션 이벤트 처리하기.

앱바(App Bar)에서 액션이 클릭되었을 때의 이벤트는 액티비티의 onOptionsItemSelected() 함수에서 처리합니다. 앞서, 앱바(App Bar)가 액티비티의 "옵션 메뉴(Options Menu)" 역할을 수행하기 때문에 onCreateOptionsMenu() 함수에서 메뉴를 초기화했듯이, 메뉴 리소스 XML에서 "<item>"으로 정의된 액션이 선택되면 onOptionsItemSelected() 함수가 호출되는 것입니다.

onOptionsItemSelected() 함수


어떤 액션이 선택되었는지는 onOptionsItemSelected() 함수의 파라미터인 MenuItem의 getItemId() 함수를 통해 식별할 수 있습니다. getItemId() 함수를 통해 리턴되는 값은, 메뉴 리소스 XML의 "<item>"요소에서 "id" 속성에 지정된 값입니다.

앱바(App Bar) 액션 이벤트 처리하기.

@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_search : // TODO : process the click event for action_search item. return true ; // ... // ... default : return super.onOptionsItemSelected(item) ; } }

onOptionsItemSelected() 함수에서 선택된 아이템에 대한 이벤트를 정상적으로 처리했다면, 그 결과 값을 true로 리턴해야 합니다. 하지만 식별된 id가 여기서 처리될 아이템이 아니라면(switch문의 default), super.onOptionsItemSelected() 함수 실행 결과를 리턴하여 기본적인 메뉴 처리가 수행되도록 만들어줘야 합니다. (기본적으로 false를 리턴.)

2.7 앱바(App Bar)에 앱 아이콘 표시하기.

기본적으로 앱바(App Bar)에는 앱 아이콘이 표시되지 않습니다. 물론, 최근 안드로이드의 앱바(App Bar)에서는 앱 아이콘 대신 네비게이션 아이콘을 주로 사용하지만, 취향에 따라 앱 아이콘을 지정하고싶은 경우도 있겠죠.


앱바(App Bar)에 아이콘을 표시하기 위해서는 ActionBar 클래스의 setIcon() 또는 setLogo() 함수를 사용하여 아이콘으로 표시할 이미지를 지정하면 됩니다. 그런데 한 가지 주의할 점이 있습니다. AppCompat를 사용하는 경우, 단순히 setIcon() 또는 setLogo() 함수를 호출하는 것만으로는 아이콘이 표시되지는 않는다는 것이죠. setDisplayUseLogoEnabled() 함수와 setDisplayShowHomeEnabled() 함수를 호출해야만 앱바(App Bar)에 아이콘이 정상적으로 표시되는 것을 확인할 수 있습니다.


앱바(App Bar)에 아이콘 표시하기.
    ActionBar ab = getSupportActionBar() ;

    ab.setIcon(R.drawable.app_icon) ;
    ab.setDisplayUseLogoEnabled(true) ;
    ab.setDisplayShowHomeEnabled(true) ;

앱바(App Bar)에 앱 아이콘 표시


2.8 앱바(App Bar) 감추기 및 보이기

앱에서 앱바(App Bar)를 사용할 것인지 여부는 앱에 지정한 테마가 앱바(App Bar)를 지원하는 테마인지 아닌지에 따라 결정된다고 설명했죠. 앞서 테마 이름에 ".NoActionBar"가 포함된 경우, 앱바(App Bar)를 사용하지 않는 테마라고 설명했습니다. 하지만 조금 더 자세하게 들여다보자면, 사실, 테마의 사용 여부는 테마의 이름에 의해 결정되는 것이 아니고, 테마에 지정된 "windowActionBar"라는 플래그의 값에 따라 결정됩니다. 앱바(App Bar)를 사용하는 경우 true, 그렇지 않으면 false 값을 지정하는 것이죠. ".NoActionBar" 테마도 내부적으로는 "windowActionBar" 플래그가 false 값으로 지정된 테마일 뿐입니다.


그러므로 ".NoActionBar"라는 이름이 포함된 테마 대신, 아래와 같이 "windowActionBar" 플래그 값을 false로 지정하여도 앱바(App Bar)가 표시되지 않게 만들 수 있습니다. 참고로, AppCompat에서는 "windowActionBar" 플래그만 사용하는 경우, "AppCompat does not support the current theme features: { windowActionBar: false, ... }"라는 에러가 발생합니다. 이런 경우 "windowNoTitle" 플래그를 같이 사용하면 됩니다.

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        ...
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

그런데 ".NoActionBar" 테마를 사용하거나 "windowActionBar" 플래그를 사용하는 방법은 앱바(App Bar)가 앱에서 원천적으로 표시되지 않도록 만듭니다. 단순히 보이고 말고의 문제가 아니라, 사용 자체를 하지 않도록 만든다는 것이죠. 하지만 어떤 경우에는, 기본적으로 앱바(App Bar)를 사용하되, 상황에 따라 앱바(App Bar)가 보이지 않도록 만들고 싶은 경우가 있을 것입니다. 이런 경우는 어떻게 해야 할까요?


방법은 매우 간단합니다. getSupportActionBar()를 통해 획득한 ActionBar 클래스 객체의 show(), hide() 함수를 사용하여 앱바(App Bar)를 보이게 만들거나 감출 수 있습니다.

앱바(App Bar) 보이기 또는 감추기.
    ActionBar ab = getSupportActionBar() ;

    ab.show() ;     // 앱바(App Bar) 보이기.
    ab.hide() ;     // 앱바(App Bar) 감추기.

앱바(App Bar) 보이기 및 감추기


3. 참고

  • 머티리얼 App bar에 대한 레이아웃 구조
  • 안드로이드 개발 API 가이드. 메뉴 리소스.
  • 안드로이드 개발 API 가이드. 옵션 메뉴 만들기.
  • 안드로이드 개발 참조문서. Activity.onCreateOptionsMenu().
  • 안드로이드 개발 참조문서. Activity.onOptionsItemSelected().
    • [Activity.onOptionsItemSelected() "[https://developer.android.com/reference/android/app/Activity.html?hl=ko#onOptionsItemSelected(android.view.MenuItem))] 페이지로 이동합니다.")]을 참고하세요.

.END.


ANDROID 프로그래밍/APPBAR , , , , , , , , , , , , , , , , , , ,

  1. Blog Icon

    비밀댓글입니다

  2. 넘넘 크고 두루뭉실한 질문을 하셔서, 어디에서부터 도움을 드려야 할지 모르겠습니다. ㅠㅠ
    게다가 말씀하신 기능을 가진 앱의 동작에 대해 한번도 생각해본적이 없던 터라, 저도 그 방법이 쉽게 떠오르지 않네요.

    그래도 의견을 드려보자면,
    뷰 위에 페인트를 사용하여 직접 그리는 방법을 생각해볼 수 있겠네요. 컨텐츠는 직접 그리고 내용 변경이 필요한 경우, 뷰 위에 에디트텍스트를 띄워서 내용을 입력하고 포커스가 빠지면 보드 내용 갱신.

    음, 그리고 직접 그리지 않아도 다양한 위젯들을 사용해서 처리할 수도 있을 것 같습니다. 뷰 위젯들의 좌표만 잘 처리해주시면 원하는 기능을 만들 수 있을 것 같네요. 입력은 마찬가지로, 에디트텍스트를 띄워주면 되고...

    제가 선행해보지 않아서, 가이드를 구체적으로 해드리지 못하는 점 양해 바랍니다.
    하지만, 작업하시다가 단위 기능에서 잘 안되는 부분이 있으면 질문글 남겨주세요.
    최대한 도움드릴 수 있도록 노력하겠습니다.

    감사합니다.

  3. Blog Icon
    주머니

    이렇게 좋은 자료를 올려주셔서 너무나 감사드립니다. 개발에 큰도움을 받고있습니다^^
    이렇게 좋은 자료를 보고도 아직 모르겠는것이 있어서 실례지만 하나만 여쭤봐도 될까요?
    만약에 액션바에 위젯(예를 들어 스위치나 버튼 같은)을 추가하고 싶다면 어떠한 방법을 사용해야 하는가요?

  4. 답글로 설명드리기엔 내용이 많을 것 같은데요.

    일단 ActionBar의 setCustumView() 함수에 대해 찾아보시면 몇 가지 예제를 찾으실 수 있습니다.

    직접 예제를 통해 보여드릴 수 있으면 좋을텐데, 아직 블로그에는 관련 내용을 정리해놓지 않아서 아쉽네요.

    감사합니다.

  5. 혹시 코드 하이라이터를 어떤것을 사용하셨는지 여쭤봐도 될까요?

  6. 저는 마크다운(Markdown)으로 작성합니다. 소스보기를 해보면 아시겠지만, 코드의 각각의 element 들이 tag로 감싸져 있죠. 각 태그들에 대한 속성은 당연히 CSS로 작성해 놓았구요.

    음, 결론적으로 javascript로 만들어진 별도의 코드 하이라이터는 사용하지 않습니다.
    답변이 도움이 되었는지 모르겠네요.

    감사합니다.

  7. Blog Icon
    김민수

    정말정말 감사합니다. 제가초보라 질문 할꼐 있는데요
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    // Handle presses on the action bar items
    switch (item.getItemId()) {
    case R.id.nav_bookmark_on:
    onbookmark();
    return true;
    case R.id.nav_bookmark_off:
    offbookmark();
    return true;
    default:
    return super.onOptionsItemSelected(item);
    }
    }
    이런식으로 북마크버튼이 빨개졌다 배경색이 됬다 하게 바꾸고 싶은데 어떻게 하는건지 알려주실수 있나요?

  8. 저도 질문하신 내용을 직접 구현해보지는 않아서 정확한 답변을 드리지는 못할 것 같습니다.
    대신, 도움이 될지 몰라, 아래의 링크 내용을 보내드립니다.
    도움이 되셨으면 좋겠네요.

    http://www.androiddocs.com/training/basics/actionbar/styling.html#CustomText

    감사합니다.

  9. Blog Icon

    비밀댓글입니다

  10. 질문하신 내용은 아마 앱에 적용된 테마 색상 때문에 그렇게 표시되는 것 같습니다.
    그런데 질문만으로는 원인을 파악하기가 쉽지 않으니, 번거로우시더라도 작성하신 소스 코드를 올려주실 수 있을까요?

    그러면 도움을 드리기가 더 용이할 듯 합니다.

    프로젝트에 포함된,
    /res/values/styles.xml 파일.
    /res/values/colors.xml 파일.

    이렇게 두 가지 코드를 올려주세요.

    감사합니다.

  11. Blog Icon
    지나가는 개발자

    요즘 블로그 글들이 대충대충 짤막하고 단편적인 내용이 많은데 근래 보기힘든 잘 정리된 내용입니다.

    좋은내용 감사합니다. 문서보는것보다 더 이해가 잘되네요.

  12. 칭찬글 남겨주셔서 감사합니다.

  13. Blog Icon
    안드로이드첫걸음

    질문있습니다.!
    혹시 onOptionsitemSelected 메소드에서 디폴드값으로 super.onOptionsitemSelected(item)을 해줘야 된다고 하셨는데 그게 어떻게 동작되는지 이해가 안가는데 설명 부탁드려도 될까요???

  14. 제가 본문의 내용을 조금 헷갈리게 작성하였네요.

    디폴트 값으로 "super.onOptionsitemSelected(item)"를 호출하는 게 아니라, switch안의 default 에서 호출해줘야 한다는 의미였습니다.

    혼동을 드리게 되어 죄송합니다.

    감사합니다.

  15. Blog Icon
    김겸수

    ActionBar ab = getSupportActionBar() ;
    ab.setTitle("ActionBar Title by setTitle()") ;
    이걸 적용하려면 어느 파일에서 작업을 해야하나요?
    그건 안 적혀있네요
    ㅠㅠㅠㅠ

  16. 액션바는 액티비티 포함된 요소입니다. 그러므로 액티비티 내에서 해당 코드를 적용할 수 있습니다.

    그리고 본문에서도, "액티비티에서 getSupportActionBar() 함수를 호출하여 앱바(App Bar)에 대한 참조를 획득할 수 있습니다." 라고 되어 있는데, 조금 복잡하게 생각하신 것 같네요.

    "생각은 단순하게, 내용은 직관적으로, 실행은 반복해서!!"

    오늘도 즐거운 개발자 라이프 즐기시길 바랍니다.

    감사합니다.

  17. Blog Icon
    햄찌76

    code랑 image까지 정리가 잘 되 있어서 도움 많이 됐습니다. 정말 감사합니다

  18. 도움이 되셨다니 다행입니다.
    방문해주시고, 댓글 남겨주셔서 감사드립니다!

  19. Blog Icon
    초보1

    좋은 자료 감사 합니다.

  20. 방문해 주셔서 감사합니다.

  21. Blog Icon

    비밀댓글입니다

  22. 첫 번째 질문에 대해서는, 저도 도움드릴만한 경험이 없습니다. 하지만 아래 링크가 도움될지도 모르겠네요.

    https://mobikul.com/change-size-action-bar-icons-action-buttons/

    그리고 setNavigationOnClickListener의 파라미터는 (View.OnClickListener listener) 입니다. 일반적인 클릭 이벤트 처리 방법으로 사용하시면 되는데요. 크게 어렵게 생각하실 건 아닌 것 같은데, 혹시, 제가 질문을 잘못 이해한건지 모르겠네요.

    적고나니 답변이 많이 어설프네요.

    추가적으로 궁금한 내용있으시면, 코드와 함께 다시 질문글 남겨주세요.

    감사합니다.

  23. Blog Icon
    James lee

    대단한 블로그에 도움이 많이 되었읍니다.
    감사합니다.

  24. 과분한 칭찬글을 남겨주셨네요.
    방문해 주셔서 감사합니다.

  25. Blog Icon
    사랑합니다

    빛따님 툴바에 텍스트를 없애려면 어떻게하면 좋을까요??

  26. 직접 시험해보진 않았지만, setTitle() 메서드로 없앨 수 있을 것 같습니다.
    찾아보니 setDisplayShowTitleEnabled() 메서드를 써도 될 것 같은데요.

    아래 링크를 참고해보세요.
    https://stackoverflow.com/questions/26648227/remove-title-in-toolbar-in-appcompat-v7

    감사합니다.

  27. Blog Icon
    익명

    앱바의 액션 이벤트 처리하는 부분에서 switch문의 default조건일 때 실행하는 내용이 super.onOptionsItemSelected() 함수잖아요?? 이 때, 함수에 넘겨줘야하는 값은 없는게 맞나요??

  28. 지적해주신대로, 예제 내용이 잘못되어 있었습니다.
    super.onOptionsItemSelected()을 호출할 때, MenuItem을 전달해야 하는데, 잘못된 내용이 들어가 있었네요.

    지적해주신 내용은 본문에 반영하였습니다.

    감사합니다.

  29. Blog Icon
    wowowow

    영상보다도 이해하기 쉽고 궁금증이 사이다 먹은 것처럼 속시원하게 풀리는 글입니다!! 정말 글 잘 쓰십니다~! 자주 이용할게요~!!

  30. 과분한 칭찬글을 남겨주셨네요.
    방문해 주셔서 감사합니다.

  31. 정말 감사합니다 드디어 찾았습니다!!!!

  32. 찾으시던 내용이 본문에 있었나보네요.
    도움되신 것 같아서 다행입니다.

    방문해 주셔서 감사합니다.

  33. 매번 느끼지만, 안드로이드 개발에 거의 모든게 이 블로그에 있는거 같습니다. 초보 개발자로서 정말 크나큰 도움이 됩니다. 감사합니다.

  34. 기초적인 내용이 장황하게 정리되어 있다보니,
    안드로이드 개발을 이제 막 시작한 개발자 분들께는 도움이 될 수 있을 것 같습니다.

    좀 더 알찬 내용들 담을 수 있도록 노력하겠습니다.

    감사합니다.

  35. Blog Icon
    코악

    좋은글 감사합니다. 앱바, 액션바, 툴바 이런 용어들이 헷갈렸는데 이 글 덕분에 명확하게 정리되는것 같아요! :)

  36. 도움이 되셨다니 다행이네요.
    방문해 주셔서 감사합니다.

  37. 좋은자료 감사합니다.
    액션바 만드는 방법좀 알려주실 수 있나요?

  38. 본문 내용에서 이해가지 않는 내용이 있나요?