반응형

사용자의 네비게이션을 통해, 여러분의 앱은 back을 하고, 아웃된다. 이 순간 액티비티 인스턴스는 그들의 생명주기(lifecycle)안에서 서로 다른 상태로 전환됩니다. 액티비키가 처음 시작할 때 만들어진 인스턴스를 시스템의 전면(foreground)으로 오도록 하고 사용자의 포커스를 받아옵니다. 이 과정이 진행되는 동안, 안드로이드 시스템은 여러분이 사용자 인터페이스(UI)와 다른 구성물들을 생성한 액티비티에 있는 하나의 연속된 생명주기(lifecycle) 메소드들을 호출합니다. 만약 사용자가 다른 액티비티를 실행하거나 다른 앱으로 전환하는 행동을 한다면 시스템은 액티비티를 백그라운드(background : 액티비티가 더 이상 보이지 않지만 인스턴스(instance)는 온전히 남아있는 상태)로 이동하면서 액티비티에 있는 또 다른 생명주기(lifecycle) 메소드 세트를 호출합니다.


 사용자가 액티비티를 떠나거나(끌때) 다시 돌아올 때 여러분의 액티비티가 하고자 하는 행동을 생명주기(lifecycle) 콜백 메소스(callback method) 안에, 선언할 수 있습니다. 예를 들어보면, 만약 여러분이 스트리밍(streaming)을 받아오는 비디오 플레이어(video player)를 만든다면, 사용자가 또 다른 앱으로 전활 할 때 비디오를 일시정지(pause)하거나 네트워크(network)의 연결을 종료해야 할 지도 모릅니다. 사용자가 다시 돌아올 때, 여러분은 네트워크에 다시 접속을 하고 사용자가 멈췄던 지점(spot)에서 비디오가 다시 재생(resume)할 수 있도록 할 수 있습니다.


 이번 시간에는 각 액티비티 인스턴스(instance)의 중요한 생명주기 콜백 메소드(lifecycle callback method)를 설명하도록 하겠습니다. 그리고 콜백 메소드를 전달받고 사용하는 방법을 소개합니다. 그래서 여러분의 액티비티가 사용자가 원하는 작업을 하게 되며, 더 이상 액티비티가 필요하지 않을 때 시스템 자원을 소비하지 않도록 합니다.




Lessons

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

Activity 시작하기(Starting)

 여러분의 앱을 실핼할 수 있는 방법과 기본 액티비티 생성 방법에 대해 액티비티 생명주기(lifecycle)의 기본사항을 학습합니다.


Activity 일시정지(Pausing) 와 이어하기(Resuming)

 여러분의 액티비티가 일시정지 하거나 이어할 때 발생하는 일과 여러분이 상태의 전환 동안 해야하는 일에 대해 학습합니다.


Activity 정지(Stopping)과 다시 시작하기(Restarting)

 여러분의 액티비티가 완전하게 화면을 벗어나가나 다시 돌아왔을 때 발생하는 일에 대해 학습합니다.


Activity 다시 생성하기(Recreating)

 여러분의 액티비티가 파괴될 때 발생하는 일과 필요할 때 액티비티 상태를 다시 생성할 수 있는 방법에 대해 학습합니다.

반응형
반응형

안드로이드의 최신 버전은 종종 앱에 대한 좋은 API 들을 제공하는 하지만, 여러분은 더 많은 디바이스들이 업데이트를 할 때 까지 예전 버전에 대한 지원을 계속해야 만 합니다. 이번 시간에는 오래된 버전에서 최신 API들의 이득을 얻을 수 있는 방법을 소개하겠습니다. 


 안드로이드 개발자 사이트에는  Google Play Store에 방문한 디바이스의 수를 기반으로 설치되어 있는 Platform Versions 에 대한dashboard 를 정기적으로 업데이트 해주고 있습니다. 일반적으로, 최선버전을 타겟으로 하는 여러분의 앱이 전체 활동하는 디바이스의 90%를 지원하도록 하는 것이 좋은 습관입니다.


 Tip: 여러 안드로이드 버전을 통틀어 가장 좋은 특징과 기능들 제공하기 위해 여러분의 앱에 오래된 버전에서 다양한 최신 플랫폼 API들을 사용하도록 허용하는 Android Support Library 를 사용 해야만 합니다. 



최소(Minimum)와 타겟(Target) API Levels 지정하기

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

 AndroidManifest.xml 파일은 여러분에 앱에 대한 세부사항들이 묘사되어 있습니다. 그리고 이것이 지원하는 Android 버전에 대해서도 식별되어 있습니다. 특히, 여러분의 앱 설계와 테스트에 대응되는 가장 높은 API level과 이에 호환되는 가장 낮은 버전의 API level 을 식별하기 위한 <uses-sdk 요소에 있는 minSdkVersion 과 targetSdkVersion 속성.


 예:

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

    <uses-sdk android:minSdkVersion="4"

                 android:targetSdkVersion="15" />

    ...

</manifest>


 새로운 Android 버전이 출시되면, 몇몇 스타일(Style)과 행동(Behavior)이 바뀔 수 도 있습니다. 여러분의 앱이 이러한 변경 사항을 활용하여 앱의 스타일에 맞는지 확인하도록 하려면, 여러분은 반드시 targetSdkVersion의 값이 최신 안드로이드 버전과 일치하도록 설정해야 만 합니다.


 

 실행할 때 시스템 버전 확인하기

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

 안드로이드는 Build 상수 클래스안에 각 플랫폼 버전에 대한 유일한 코드를 제공하고 있습니다. 가장 높은 API level를 시스템이 사용할 수 있는 경우에만 이 API들의 사용을 보증하기 때문에 이런 상태를 확인하기 위해 여러분의 앱안에 이 코드들을 사용합니다.

 private void setUpActionBar() {

    // Make sure we're running on Honeycomb or higher to use ActionBar APIs

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {

        ActionBar actionBar = getActionBar();

        actionBar.setDisplayHomeAsUpEnabled(true);

    }

}


Note : XML 리소스들을 파싱(parsing)할 때, 안드로이드는 현재 디바이스에서 지원하지 않는 XML속성은 무시합니다. 그래서 여러분은 최신버전에서 지원하고 있는 XML 속성에 대해 오래된 버전에서 다운될 걱정없이 안전하게 사용할 수 있습니다. 예를들어, 만약 여러분이 앱에 대해 targetSdkVersion="11"을 설정하면, 기본적으로 안드로이드 3.0버전 이상에서만 포함하고 있는 ActionBar을 포함합니다. 그런다음 액션바에 메뉴 아이템을 추가하기 위해서는, 여러분의 메뉴 리소스 XML안에 android:showAsAction="ifRoom"을 설정할 필요가 있습니다. 안드로이드의 이전 버전은 단순하게 이 showAsAction 속성을 무시하기 때문에(즉, 여러분은 res/menu-v11/로 구분된 별도의 버전이 필요하지 않습니다.), 버전 간 XML파일에서 이 작업을 하는 것은 안전합니다. 



 플랫폼 스타일(Style)과 테마(Theme) 사용하기

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

 안드로이드는 기본 운영체체(OS)의 모양과 느낌을 주는 사용자경험(user experience : UX) 테마(Theme)를 제공합니다. 이 테마들(Themes)은 메니페스트 파일내에서 앱에 적용할 수 있습니다. 스타일(Style)과 테마(Theme)에 내장 된 이것들을 사용함으로서 여러분의 앱은 자연스럽게 새로 릴리즈된 안드로이의 최신 모양과 느낌으로 만들어집니다. 


 

 여러분의 액티비티를 하나의 다이얼로그 박스(Dialog Box)처럼 만들기

 <activity android:theme="@android:style/Theme.Dialog">


 여러분의 액티비티가 투명한 배경을 가지도록 만들기

 <activity android:theme="@android:style/Theme.Translucent">


 res/values/styles.xml 에 정의된 여러분의 커스텀 테마(custom theme) 사용하기

 <activity android:theme="@style/CustomTheme">

 


 여러분의 앱 전체(모든 액티비티들)에 적용하기, <application> 요소의 android:theme 속성을 추가합니다.

 <application android:theme="@style/CustomTheme">



테마(Theme)를 사용하여 만들기에 대한 추가정보는 개발자 사이트의 Styles and Theme 가이드를 참고하시기 바랍니다.  

반응형
반응형

 Android는 일반적으로 두가지 속성을 사용하여 디바이스의 화면을 분류합니다.: 크기(Size)와 밀도(Density)

여러분은 여러분의 앱이 크기(Size)와 밀도(Density) 모두의 범위 안에서 화면에 설치될 것을 기대합니다. 여러분은 다른 화면 크기(Size)와 밀도(Density)에 대해 앱의 모양을 최적화하도록 몇가지 대체 리소스를 포함해야만 합니다.


° 4가지의 일반화된 크기들(Sizes) : small, normal, large, xlarge 

° 4가지의 일반화된 밀도들(Densities) : low(ldpi), medium(mdpi), high(hdpi), extra high(xhdpi) 



 여러분이 다른 화면의 크기(size)와 밀도(density)에 대해 다른 레이아웃(layout)과 비트맵(bitmap)을 선언하기 위해서는 "다른 언어에서의 문자열 지원하기"(Supporting Difference Language)에서 했던 방법과 유사하게 대체 리소스들을 별도의 디렉토리들에 배치해야 합니다.


 또한 화면 방향(가로 or 세로, landscape or portrait)은 화면 크기의 변화로 간주된다는 것을 알아야 합니다. 그래서 많은 앱들은 각 방향에 대해 사용자 경험(User Experience : UX)을 최적화 하기 위한 레이아웃으로 수정해야 만 합니다.



 다른 레이아웃들(Different Layouts) 만들기

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

 서로 다른 화면 사이즈에서 UX 를 최적화 하기 위해서, 여러분은 여러분이 지원하길 원하는 각 각의 화면 사이즈에 대한 고유한 레이아웃XML 파일을 만들어야 합니다. 각 레이아웃은 -<screen_size>를 이름 뒤에 접미사로 붙여 만들어진 알맞은 layout 리소스 디렉토리에 저장해야만 합니다. 예를 들어, large 화면에 대해 하나의 고유한 레이아웃을 res/layout-large/ 안에 저장해야 합니다. 


Note : 안드로이드는 화면에 알맞게 맞추기위해 자동으로 여러분의 레이아웃을 스케일합니다. 그러므로, 여러분의 레이아웃은 UI 요소의 절대적인 사이즈에 대해 걱정할 필요없이 서로 다른 화면 사이즈에 배치할 수 있습니다. 대신 사용자경험(user experiece : UX)에-(다른 형제뷰들과 관련한 중요한 뷰들의 사이즈와 위치같은) 영향을 주는 레이아웃에 초점을 두어야 합니다.


예들들어, 이 프로젝트는 기본적인 레이아웃과 large 사이즈의 화면 대체 레이아웃을 포함하고 있습니다.


MyProject/

    res/

        layout/

            main.xml

        layout-large/

            main.xml


이 xml 파일 이름은 반드시 같아야 합니다. 하지만 그들의 컨텐츠는(Contents) 화면 사이즈에 해당하는 최적화된 UI 를 제공하기 위해 서로 다릅니다.


 늘 그랬듯이 여러분의 앱 레이아웃을 단순하게 참조합니다.

 @Override

 protected void onCreate(Bundle savedInstanceState) {

     super.onCreate(savedInstanceState);

     setContentView(R.layout.main);

}


 시스템은 앱이 실행될 때, 실행하고 있는 디바이스의 화면 사이즈를 기반으로 적절한 레이아웃 디렉토리로부터 레이아웃 파일을 읽어들입니다. 개발자 사이트의  Providing Resources 가이드에 안드로이드가 어떻게 적절할 리소스를 선택하는지에 대한 추가 정보가 있습니다.


 또 다른 예로서, 이 프로젝트는 가로(landscape) 방향(orientation)에 대한 대체 레이아웃을 가지고 있습니다.


MyProject/

    res/

        layout/

            main.xml

        layout-land/

            main.xml


 기본적으로 layout/main.xml 파일은 세로(Portrait) 방향으로 사용되어 집니다.


 만약 여러분이 특별하게 large 사이즈를 포함하고 있는 가로(landscape) 방향에 대한 레이아웃을 제공하기 원한다면, 여러분은 largeland 규정자 모두 사용할 필요가 있습니다.


MyProject/

    res/

        layout/              # default (portrait)

            main.xml

        layout-land/         # landscape

            main.xml

        layout-large/        # large (portrait)

            main.xml

        layout-large-land/   # large landscape

 

            main.xml


 Note: Android 3.2 이상에서는 밀도에 독립적인 픽셀(density-independent pixel : dip)의 간격으로 최소 폭과 높이를 기반으로 화면사이즈에 대한 리소스를 지정할 수 있도록 화면 사이즈를 정의하는 고급 방법을 지원합니다. 이번 시간에는 이 새로운 기술에 대한 부분은 다루지 않습니다. 추가 정보를 원하시면, 개발자 사이트의 Designed for Multiple Screens 를 참조하시기 바랍니다.



다른 비트맵(Bitmaps) 만들기

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

 여러분은 언제나 일반화된 밀도 버킷(density buckets : low, medium, high and extra high density)에 알맞게 스케일된(scaled) 각각의 비트맵(bitmap) 리소스를 제공해야 합니다. 이렇게 하면 모든 화면 밀도에 좋은 그래픽 품질과 성능을 달성하는데 도움이 됩니다.


 이러한 이미지를 생성하려면, 여러분은 벡터 형식으로 아래 나와있는 사이즈 비율(size scale)을 사용하여 각 밀도에 대한 이미지를 생성해야 합니다.


° xhdpi : 2.0

° hdpi : 1.5

° mdpi : 1.0 (baseline)

° ldpi : 0.75


 이는 여러분이 만약 xhdpi 디바이스에 대해 200*200 사이즈의이미지를 생성했다면, 같은 이미지를 hdpi에 150*150mdpi에 100*100ldpi에 75*75 로 생성해야 한다는 것을 의미합니다.


그런 다음, 알맞은 drawable 리소스 디렉토리안에 이 파일들을 위치합니다.


MyProject/

    res/

        drawable-xhdpi/

            awesomeimage.png

        drawable-hdpi/

            awesomeimage.png

        drawable-mdpi/

            awesomeimage.png

        drawable-ldpi/

 

            awesomeimage.png


 언제든 여러분은 @drawable/awesomeimage 로 참조하면 시스템은 여러분의 화면 밀도를 기반으로 알맞은 비트맵(bitmap)을 선택합니다.


Note: Low-density(ldpi) 리소스는 항상 필요로 하지는 않습니다. 여러분이 hdpi 자원를 제공했을 때, 시스템은 자동으로 ldpi 화면에 적절하게 맞추기 위해 그 것들을 절반으로 줄여서 사용합니다.




개발자 사이트의 Iconography design 가이드에서 icon 자원들을 만드는 가이드와 팁에 대해 참고하실 수 있습니다. 

반응형
반응형

 여러분의 앱 코드에서 UI 문자열들을 추출하고 외부파일에 그 것들을 보관하는 것은 언제나 좋은 습관입니다. 안드로이드는 각각의 안드로이드 프로젝트안에 리소스(Resources) 디렉토리를 가지게 하여 이 것을 쉽게 만듭니다.


 만약 여러분인 Android SDK Tools을 사용하여 프로젝트를 만들었다면( 이전 포스트인 "안드로이드 프로젝트 만들기" 참고) 이 툴은 프로젝트의 top level에 res/ 디렉토리를 만들어 냅니다. 이 res/ 디렉토리 안에는 다양한 리소스 타입의 서브 디렉토리들이 있습니다. 또한 여러분의 문자열 값을 가지고 있는 res/values/strings.xml 같이 기본적인 파일들이 몇개 있습니다.




나라별(지역 Locale) 디렉토리들과 문자열 파일들 만들기

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

 더 많은 언어를 지원하기 위해, res/ 안에 디렉토리의 이름 끝에 hyphen(-)기호와 함께 ISO 언어코드(ISO Language code)를 포함한 values 디렉토리를 추가하세요. 예를 들어, values-es 는 언어코드 "es"(스페인)를 부여한 지역에 대한 간단한 리소스들을 포함한 디렉토리입니다. Android 는 실행할 때 디바이스의 지역설정에 따라 적절한 리소스를 읽어들입니다. 좀더 자세한 정보는 개발자 사이트의"Providing Alternative Resources" 를 보시기 바랍니다. 여러분이 지원할 언어을 결정했다면, 리소스 서브디렉토리와 문자열 리소스 파일들을 만들 수 있습니다. 예:


MyProject/

    res/

       values/

           strings.xml

       values-es/

           strings.xml

       values-fr/

 

           strings.xml


해당 파일에 각 지역에 적절한 문자열 값을 추가하세요.


실행할 때, 안드로이드 시스템은 여러분의 디바이스에 현재 설정된 지역을 기반으로 적절한 문자열 리소스를 사용합니다.


예를 위해, 아래는 다른 언어에 대한 몇 가지 다른 문자열 리소스들을 보여드립니다.


English(default locale), /values/strings.xml

 <?xml version="1.0" encoding="utf-8"?>

<resources>

    <string name="title">My Application</string>

    <string name="hello_world">Hello World!</string>

</resources>


Spanish, /values-es/strings.xml

 <?xml version="1.0" encoding="utf-8"?>

<resources>

    <string name="title">Mi Aplicacion</string>

    <string name="hello_world">Hola Mundo!</string>

</resources>


French, /values-fr/strings.xml

 <?xml version="1.0" encoding="utf-8"?>

<resources>

    <string name="title">Mon Application</string>

    <string name="hello_world">Bonjour le monde !</string>

</resources>




문자열(String) 리소스들 사용하기

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

 여러분은 소스코드와 다른 XML 파일들에서 <string> 요소의 name 속성에 정의된 리소스이름을 사용하여 문자열 리소스를 참조할 수 있습니다.



 여러분의 소스코드에서, 여러분은 R.string.<string_name> 문법을 통해 문자열 리소스를 참조할 수 있습니다. 아래 방법처럼 문자열 리소스에 접근할 수 있는 다양한 방법이 있습니다.

예:

 // Get a string resource from your app's Resources

String hello = getResources().getString(R.string.hello_world);


// Or supply a string resource to a method that requires a string

TextView textView = new TextView(this);

textView.setText(R.string.hello_world);




 다른 XML 파일에서, 여러분은 @string/<string_name> 문법을 통해 문자열 리소스를 참조할 수 있습니다. XML속성은 언제든 문자열 값에 접근합니다.

예:

 <TextView

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:text="@string/hello_world" />


반응형
반응형

안드로이드 단말기들(devices)은 전 세계에서 많은 모양과 사이즈로 만들어 졌습니다. 광범위한 디바이의 종류와 함께, 여러분은 여러분의 앱을 거대한 고객들에게 제공할 기회를 가지게 되었습니다. Android 에서 가능한 성공하기 위해서 여러분의 앱은 다양한 디바이스의 장치 구성에 맞출 필요가 있습니다. 여러분이 고려해야 할 몇가지 중요한 변수 중 일부는 다른언어(Different Language), 화면 크기(Screen Size), 안드로이드 플랫폼 버전(version of the Android platform)을 포함합니다.


 이번 시간에는 여러분의 앱이 하나의 어플리케이션 패키지(application package : APK)를 사용하여 다양한 안드로이드 호환 디바이스에 최적화된 사용자 경험(User experience : UX)을 제공할 수 있도록 기본적인 플랫폼 기능을 사용하는 방법과 대체 자원 및 기타 기능들을 활용하는 방법을 학습하도록 하겠습니다.


 

Lessons

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

다른 언어들 지원하기(Supporting Difference Languages)

 대체 문자열 리소스(alternatives string resources)을 통해 다중(multiple) 언어를 지원하는 방법 학습


다른 화면 크기들 지원하기(Supporting Difference Screens)

 다른 화면 크기(Screen sizes)와 해상도(densities)에 따라 최적화된 사용자 경험을(User experience : UX) 만드는 방법 학습


다른 플랫폼 버전 지원하기(Supporting Difference Platform Version)

 지속적으로 Android 이전 버전을 지원하면서 Android의 새로운 버전에서 사용할 수 있는 APIs를 사용 하기위한 방법 학습

반응형
반응형

 기본적으로, 액션바(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 이상 을 포함한 모든 버전에서 작동합니다.

반응형
반응형

액션바의 텍스트 색상(Text Color) 커스터마이즈(사용자 정의) 하기

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

 액션바(Action Bar)의 텍스트 컬러를 수정하려면, 각 각의 텍스트 요소에 대해 별도의 속성을 재 정의(override) 해야 합니다.


° Action Bar title : 여러분의 커스텀 ActionBarStyle에 titleTextStyle 속성과 textColor 속성을 지정한 커스텀 스타일을 만듭니다.

 Note: 커스텀 스타일은 TextAppearance.Holo.Widget.ActionBar.Title 을 부모 스타일로 사용 한 titelTextStyle 에 적용됩니다.


° Action Bar tabs : 여러분의 액티비티 테마(Activity theme)에 actionBarTabTextStyle을 재 정의(override)

° Action Button : 여러분의 액티비티 테마(Activity theme)에 actionMenuTextColor를 재 정의(override)



Android 3.0 이상에서

 Android 3.0 이상을 지원한다면, 여러분의 스타일(StyleXML 파일은 아래와 같을 겁니다.


res/values/theme.xml

 <?xml version="1.0" encoding="utf-8"?>

<resources>

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

    <style name="CustomActionBarTheme"

           parent="@style/Theme.Holo">

        <item name="android:actionBarStyle">@style/MyActionBar</item>

        <item name="android:actionBarTabTextStyle">@style/MyActionBarTabText</item>

        <item name="android:actionMenuTextColor">@color/actionbar_text</item>

    </style>


    <!-- ActionBar styles -->

    <style name="MyActionBar"

           parent="@style/Widget.Holo.ActionBar">

        <item name="android:titleTextStyle">@style/MyActionBarTitleText</item>

    </style>


    <!-- ActionBar title text -->

    <style name="MyActionBarTitleText"

           parent="@style/TextAppearance.Holo.Widget.ActionBar.Title">

        <item name="android:textColor">@color/actionbar_text</item>

    </style>


    <!-- ActionBar tabs text styles -->

    <style name="MyActionBarTabText"

           parent="@style/Widget.Holo.ActionBar.TabText">

        <item name="android:textColor">@color/actionbar_text</item>

    </style>

</resources>

 



Android 2.1 이상에서

 Support Library를 사용 한다면, 여러분의 스타일(StyleXML 파일은 아래와 같을 겁니다.


res/values/theme.xml

 <?xml version="1.0" encoding="utf-8"?>

<resources>

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

    <style name="CustomActionBarTheme"

           parent="@style/Theme.AppCompat">

        <item name="android:actionBarStyle">@style/MyActionBar</item>

        <item name="android:actionBarTabTextStyle">@style/MyActionBarTabText</item>

        <item name="android:actionMenuTextColor">@color/actionbar_text</item>


        <!-- Support library compatibility -->

        <item name="actionBarStyle">@style/MyActionBar</item>

        <item name="actionBarTabTextStyle">@style/MyActionBarTabText</item>

        <item name="actionMenuTextColor">@color/actionbar_text</item>

    </style>


    <!-- ActionBar styles -->

    <style name="MyActionBar"

           parent="@style/Widget.AppCompat.ActionBar">

        <item name="android:titleTextStyle">@style/MyActionBarTitleText</item>


        <!-- Support library compatibility -->

        <item name="titleTextStyle">@style/MyActionBarTitleText</item>

    </style>


    <!-- ActionBar title text -->

    <style name="MyActionBarTitleText"

           parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">

        <item name="android:textColor">@color/actionbar_text</item>

        <!-- The textColor property is backward compatible with the Support Library -->

    </style>


    <!-- ActionBar tabs text -->

    <style name="MyActionBarTabText"

           parent="@style/Widget.AppCompat.ActionBar.TabText">

        <item name="android:textColor">@color/actionbar_text</item>

        <!-- The textColor property is backward compatible with the Support Library -->

    </style>

</resources>






액션바의 Tab Indicator 커스터마이즈(사용자 정의) 하기

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

 navigation tabs(탐색 탭)에 사용되는 indicator 를 변경하려면, actionBarTabStyle 속성을 재 정의(override) 한 액티비티 테마(Theme)를 만들어야 합니다. 이 속성은 state-list drawable이 지정된 배경(background)을 재 정의한 다른 스타일 리소스를 가리킵니다.




 Note : 하나의 state-list drawable 은 현재 선택된 탭이 탭과 다른 배경으로 그 상태을 가리키도록 하는 것은 중요합니다. 다양한 버튼의 상태에 따라 drawable 리소드를 다르게 처리할 수 있는 방법에 대한 자세한 내용은 개발자 사이트의 State List 도큐먼트를 참고하시기 바랍니다.




예를 들어, 여기 액션바 탭(Action Bar Tab)의 여러 다른 상태에 따라 지정된 배경 이미지가 다르게 선언된 state-list drawable 있습니다.


res/drawable/actionbar_tab_indicator.xml

 <?xml version="1.0" encoding="utf-8"?>

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


<!-- STATES WHEN BUTTON IS NOT PRESSED -->


    <!-- Non focused states -->

    <item android:state_focused="false" android:state_selected="false"

          android:state_pressed="false"

          android:drawable="@drawable/tab_unselected" />

    <item android:state_focused="false" android:state_selected="true"

          android:state_pressed="false"

          android:drawable="@drawable/tab_selected" />


    <!-- Focused states (such as when focused with a d-pad or mouse hover) -->

    <item android:state_focused="true" android:state_selected="false"

          android:state_pressed="false"

          android:drawable="@drawable/tab_unselected_focused" />

    <item android:state_focused="true" android:state_selected="true"

          android:state_pressed="false"

          android:drawable="@drawable/tab_selected_focused" />



<!-- STATES WHEN BUTTON IS PRESSED -->


    <!-- Non focused states -->

    <item android:state_focused="false" android:state_selected="false"

          android:state_pressed="true"

          android:drawable="@drawable/tab_unselected_pressed" />

    <item android:state_focused="false" android:state_selected="true"

        android:state_pressed="true"

        android:drawable="@drawable/tab_selected_pressed" />


    <!-- Focused states (such as when focused with a d-pad or mouse hover) -->

    <item android:state_focused="true" android:state_selected="false"

          android:state_pressed="true"

          android:drawable="@drawable/tab_unselected_pressed" />

    <item android:state_focused="true" android:state_selected="true"

          android:state_pressed="true"

          android:drawable="@drawable/tab_selected_pressed" />

</selector>




Android 3.0 이상에서

 Android 3.0 이상을 지원한다면, 여러분의 스타일(StyleXML 파일은 아래와 같을 겁니다.


res/values/theme.xml

 <?xml version="1.0" encoding="utf-8"?>

<resources>

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

    <style name="CustomActionBarTheme"

           parent="@style/Theme.Holo">

        <item name="android:actionBarTabStyle">@style/MyActionBarTabs</item>

    </style>


    <!-- ActionBar tabs styles -->

    <style name="MyActionBarTabs"

           parent="@style/Widget.Holo.ActionBar.TabView">

        <!-- tab indicator -->

        <item name="android:background">@drawable/actionbar_tab_indicator</item>

    </style>

</resources>

 



Android 2.1 이상에서

 Support Library를 사용 한다면, 여러분의 스타일(StyleXML 파일은 아래와 같을 겁니다.


res/values/theme.xml

 <?xml version="1.0" encoding="utf-8"?>

<resources>

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

    <style name="CustomActionBarTheme"

           parent="@style/Theme.AppCompat">

        <item name="android:actionBarTabStyle">@style/MyActionBarTabs</item>


        <!-- Support library compatibility -->

        <item name="actionBarTabStyle">@style/MyActionBarTabs</item>

    </style>


    <!-- ActionBar tabs styles -->

    <style name="MyActionBarTabs"

           parent="@style/Widget.AppCompat.ActionBar.TabView">

        <!-- tab indicator -->

        <item name="android:background">@drawable/actionbar_tab_indicator</item>


        <!-- Support library compatibility -->

        <item name="background">@drawable/actionbar_tab_indicator</item>

    </style>

</resources>






추가 리소스들

° 개발자 사이트의 Action Bar 가이드에 나열되어 있는 action bar의 스타일(Style) 속성들을 참조하세요.

° 개발자 사이트의 Style and Themes 가이드에 있는 테마(Theme) 작업 방법에 대해 학습하세요.

° 더욱 완벽한 액션바의 스타일링을 위해서는 Android Action Bar Style Generator를 해보시기 바랍니다. 

 

Android Action Bar Style Generator
jgilfelt.github.io
본문으로 이동

반응형
반응형

 액션바는 사용자에게 작업을 수행하고 탐색할 수 있는 익숙하고 당연한 방법을 제공합니다. 하지만 그것이 다른앱과 정확히 같은 모양으로 보일 필요는 없습니다. 만약 여러분이 더 나은 본인의 앱 브랜드를 꾸미고 싶다면, 여러분은 아주 손쉽게 안드로이드의 스타일(Style)과 테마(Theme) 자원들(Resources)을 사용하여 액션바를 꾸밀 수 있습니다. 


 안드로이드는 "dark" 또는 "light" 액션바 스타일을 포함한 몇가지 빌트인 액티비티 테마들을 가지고 있습니다. 여러분은 또한 이 테마들을 사용자가 원하는 모습으로 customize 하도록 확장할 수 있습니다. 


Note: 만약 여러분이 액션바를 위해 Support Library APIs를 사용한다면 반드시 Theme.AppCompat 스타일을 사용(또는 Override)해야만 합니다.(API level 11버전 이상에서 사용할 수 있는 Theme.Holo 패밀리들 대신하여) 이 과정에서, 여러분은 각각의 스타일 속성을 두 번 선언해야만 합니다. 한 번은 플랫폼의 스타일 속성을 사용합니다.(android: 속성) 그리고 또 한번은 Support Libraryappcompat.R.attr 속성- 현재 액티비티 속성들에 대한 Context) 에 포함된 스타일 속성을 사용합니다.




안드로이드(Android) 테마(Theme) 사용하기

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

 안드로이드는 액션바의 색상(Color)를 지시하고 있는 두개의 기본적인 액티비티 테마를 포함하고 있습니다.


° "dark" 테마인 Theme.Holo

° "light" 테마인 Theme.Holo.Light




 여러분은 메니페스트 파일 안에 있는 <application> 요소나 개별적인 <activity>요소에 android:theme 를 선언함으로 여러분의 앱 전체 또는 각각의 개별적인 액티비티에 이 테마들을 적용할 수 있습니다. 


예:

 <application android:theme="@android:style/Theme.Holo.Light" ... />

 


 또한 Theme.Holo.Light.DarkActionBar 를 선언함으로서 밝은 색의 색상 구성을 사용하면서 액션바는 어둡게 사용할 수도 있습니다. 

 



 만약 여러분이 Support Library를 사용한다면, 여러분은 Theme.AppCompat 으로 대체하여 사용하셔야 합니다.


° "dark" 테마인 Theme.AppCompat

° "light" 테마인 Theme.AppCompat.Light

° "light" 테마와  "dark" 액션바 테마인Theme.AppCompat.Light.DarkActionBar


 여러분의 액션바 색상에 적절하게 대비되는 색상으로 icon 을 사용했는지 확인하시기 바랍니다. 여러분에게 도움을 주기위해 Action Bar Icon Pack 안에 Holo light 나 Holo dark 액션바에서 사용할 수 있는 표준 액션 아이콘들(action icons)을 포함해 놓았습니다.




배경(Background) 커스터마이즈(사용자 정의)

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

액션바의 배경을 변경하기위해 actionBarStyle 속성을 오버라이드(override) 하여 여러분의 액태비티 테마을 커스터마이징 할 수 있습니다. 이 속성은 액션바에 drawable 리소스를 지정하여 여러분의 배경 속성을 오버라이드 할 수 있도록 합니다.


 



 만약 여러분의 앱이 navigation tabs 나 split action bar 를 사용한다면, 여러분은 이 액션바들 각 각에 backgroundStacked backgroundSplit 속성을 지정하여 사용할 수 있습니다.


주의(Caution): 여러분의 커스텀(custom) 테마(Theme)와 스타일(Style)에 적절한 부모 테마를 선언하여 그 것들의 스타일을 상속하는 것은 매우 중요합니다. 부모 스타일이 없다면, 여러분의 액션바(Action Bar)는 여러분이 직접 명시적으로 선언한 속성을 제외하고 많은 스타일 속성들이 없이 만들어 집니다.



Android 3.0 이상에서 

 Android 3.0 이상을 지원한다면, 여러분은 아래처럼 액션바의 배경(background) 를 정의 할 수 있습니다.


res/values/theme.xml

 <?xml version="1.0" encoding="utf-8"?>

<resources>

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

    <style name="CustomActionBarTheme"

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

        <item name="android:actionBarStyle">@style/MyActionBar</item>

    </style>


    <!-- ActionBar styles -->

    <style name="MyActionBar"

           parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">

        <item name="android:background">@drawable/actionbar_background</item>

    </style>

</resources>


그런다음 전체 앱 또는 각 각의 개별적인 액티비티들에 여러분의 테마(Theme)를 적용합니다.

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


Android 2.1 이상에서 

 여러분이 Support Library 를 사용했을 때, 여러분이 위와 같은 테마를 사용하려면 아래처럼 테마를 대체해야 합니다.


res/values/theme.xml

 <?xml version="1.0" encoding="utf-8"?>

<resources>

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

    <style name="CustomActionBarTheme"

           parent="@style/Theme.AppCompat.Light.DarkActionBar">

        <item name="android:actionBarStyle">@style/MyActionBar</item>


        <!-- Support library compatibility -->

        <item name="actionBarStyle">@style/MyActionBar</item>

    </style>


    <!-- ActionBar styles -->

    <style name="MyActionBar"

           parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">

        <item name="android:background">@drawable/actionbar_background</item>


        <!-- Support library compatibility -->

        <item name="background">@drawable/actionbar_background</item>

    </style>

</resources>


그런다음 전체 앱 또는 각 각의 개별적인 액티비티들에 여러분의 테마(Theme)를 적용합니다.

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


 다음 포스트에서 이어합니다.--

반응형
반응형

액션바는 앱의 현재 컨텍스트와 관련된 중요한 액션 아이템들에 대해 버튼을 추가 할 수 있습니다. 아이콘 과/또는 텍스트로 액션바에 바로 보여지는 것들은 액션버튼들 입니다. 액션바에 딱 맞지 않던가 그렇게 중요하지 않는 액션들은 액션바의 액션 오버플로어(Action Overflow)에 숨깁니다.


 

그림 1. 검색에 대한 하나의 액션 버튼과 보이지 않는 액션들이 추가된 액션 오버플로우(Action overflow)를 가지고 있는 액션바.


 


XML 에서 액션들 명시하기

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

 모든 액션버튼들과 액션 오버플로우(Action overflow)에서 사용할 수 있는 다른 액션들은 XML Menu resources 에 정의되어 있습니다. 액션바에 포함되길 원하는 각각의 아이템을 <item>요소로 추가합니다.


res/menu/main_activity_actions.xml

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

    <!-- Search, should appear as action button -->

    <item android:id="@+id/action_search"

          android:icon="@drawable/ic_action_search"

          android:title="@string/action_search"

          android:showAsAction="ifRoom" />

    <!-- Settings, should always be in the overflow -->

    <item android:id="@+id/action_settings"

          android:title="@string/action_settings"

          android:showAsAction="never" />

</menu>

 

 

 검색(Search) 액션은 액션바(Action Bar)안에 공간(room)이 있을 때 액션버튼이 보이도록 선언합니다. 하지만 Setting 액션은 항상 오버플로우(overflow)안에서 만 나타나도록 합니다. (기본적으로, 모든 액션들은 오버플로우(overflow)에 나타나도록 되어 있지만 각각의 액션들에 대해 여러분의 디자인 의도를 직접적으로 명시하는 것이 좋은 습관입니다.)


 android:icon 속성은 이미지의 리소스 ID 를 요구합니다. ID의 이름은 반드시 @drawble/ 다음에 여러분이 프로젝트의 res/drawable 디렉토리에 저장해 놓은 비트맵(bitmap) 의 이름이어야 합니다. 예를 들어, ic_action_search.png 를 참조하기 위해"@/drawable/ic_action_search"를 사용합니다. 마치 이전 포스트인 " 간단한 UI 만들기 "에서 소개되었던 title 속성에 사용할 문자열 리소스를 XML에서 res/values/ 디렉토리을 이용하여 정의했던 것과 같습니다.


Note: 여러분의 앱에서 아이콘들과 다른 비트맵(bitmap) 이미지를 만들 때는 해상도가 다른 화면에 대해 각각 최적화 되어 있는 여러 버전을 제공하는 것은 중요합니다. 이 내용은 나중에 Support Different Screens(다른 화면해상도 지원하기) 파트에서 좀더 소개 하겠습니다. 


 액션바 아이콘들 Download


 개발자 사이트의 iconography 가이드에 잘 맞추기 위해 여러분들은 Action Bar Icon Pack 안에 제공된 것을 사용하시기 바랍니다.


 만약 여러분의 앱이 Android 2.1로서 낮은 버전이고 이를 지원하고 호환하기 위해 Support Library 를 사용한다면, showAsAction 속성은 android: 네임스페이스를 사용할 수 없습니다. 대신 여러분은 이 속성의 접두어로 Support Library에 의해 제공되며, 여러분 본인이 가지고 있는 XML 네임스페이스를 사용해야 합니다.(사용자 정의 XML 네임 스페이스는 앱의 이름을 기반으로 해야 합니다. 하지만 여러분이 원하고 오직 선언된 파일의 범위 내에서만 접근할 수 있는 이름 이어도 됩니다.) 예를들어,


res/menu/main_activity_actions.xml

 

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

      xmlns:yourapp="http://schemas.android.com/apk/res-auto" >

    <!-- Search, should appear as action button -->

    <item android:id="@+id/action_search"

          android:icon="@drawable/ic_action_search"

          android:title="@string/action_search"

          yourapp:showAsAction="ifRoom"  />

    ...

</menu>





액션 버튼들에 반응하기

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

 사용자가 액션버튼들 중 하나 또는 액션 오버플러우(overflow) 안에 있는 아이템 중 하나를 눌렀을 때 시스템은 자동으로onOptionsItemSelected() 콜백 메소드를 호출합니다. 여러분은 이 메소드 안에, 눌려진 item으로부터 리턴된 ID가 여러분들이 <item> 요소의 android:id 속성에 선언한 값과 일치하는지 확인하기 위해 매개변수로 주어진 MenuItem의 getItemId() 메소드를 호출합니다.


 @Override

public boolean onOptionsItemSelected(MenuItem item) {

    // Handle presses on the action bar items

    switch (item.getItemId()) {

        case R.id.action_search:

            openSearch();

            return true;

        case R.id.action_settings:

            openSettings();

            return true;

        default:

            return super.onOptionsItemSelected(item);

    }

}




하위 단계 액티비티들에 대해 Up 버튼 추가하기

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

 여러분의 앱안에 있는 모든 화면들이 앱의 메인 진입화면이 아닐겁니다( "home" 화면이 아닌 액티비티들). 이 앱들은 사용자에게 액션바안에 있는 Up 버튼을 사용하여 앱의 상속구조 안에서 논리적 부모화면(상위화면)에 갈 수 있는 방법이 제공 되어야만 합니다.

 

그림 4. Gmail 에 있는 Up 버튼


 Android 4.1(API level 16) 이상에서 실행하거나 또는 Support Library로 부터 ActionBarActivity를 사용하여 실행할 때, Up 버튼은 간단하게 여러분들이 manifest 파일안에 부모 액티비티를 선언하고 Up 버튼을 사용하게 하면 됩니다.


예를 들어, 메니페스트 안에 액티비티의 부모를 선언하는 방법을 보여드리겠습니다.

 <application ... >

    ...

    <!-- The main/home activity (it has no parent activity) -->

    <activity

        android:name="com.example.myfirstapp.MainActivity" ...>

        ...

    </activity>

    <!-- A child of the main activity -->

    <activity

        android:name="com.example.myfirstapp.DisplayMessageActivity"

        android:label="@string/title_activity_display_message"

        android:parentActivityName="com.example.myfirstapp.MainActivity" >


        <!-- Parent activity meta-data to support 4.0 and lower -->

        <meta-data

            android:name="android.support.PARENT_ACTIVITY"

            android:value="com.example.myfirstapp.MainActivity" />

    </activity>

</application>


그리고 나서 setDisplayHomeAsUpEnabled() 메소드를 호출함으로서 앱 icon 을 Up 버튼으로 사용할 수 있도록 합니다.

 @Override

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_displaymessage);


    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    // If your minSdkVersion is 11 or higher, instead use:

    // getActionBar().setDisplayHomeAsUpEnabled(true);

}


 시스템은 MainActivity 가 DisplayMessageActivity 의 부모임을 알고 있기 때문에 사용자가 Up 버튼을 눌렀을때, 여러분이 특별하게 Up버튼의 이벤트를 처리하지 않더라도 자동으로 적절한 부모 액티비티 화면으로 안내합니다. 


 up 버튼의 네비게이션에 대해 추가적인 정보를 원하시면, 개발자 사이트의 Providing Up Navigation 을 참고하세요.

반응형
반응형

 가장 기본적인 형식의 액션바는 왼쪽에 앱 아이콘과 액티비티의 제목을 표시하고 있습니다. 이 간단한 형식조차도, 액션바는 여러분의 앱에 대한 아이덴티티를 유지하고 사용자의 위치를 확인 하는데 모든 액티비티들에서 유용하게 사용됩니다.


 

그림 1. 앱 아이콘과 액티비티 제목을 가지고있는 액션바


 기본적인 액션바를 만들기 위해서는 액션바를 사용할 수 있는 액티비티 테마(Theme)를 앱에 사용 해야합니다. 이러한 테마는 여러분의 앱에서 지원하는 가장 낮은 안드로이드 버전에 따라 달리 요청합니다. 그래서 이번 시간에는 앱의 최소 지원버전에 따라 두가지로 나누어 설명하고자 합니다.




Android 3.0 이상만을 지원할 경우

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

Android 3.0 (API level 11) 부터 액션바는 Theme.Holo 테마(또는 파생된 것들 중 하나)를 사용하는 모든 액티비티들에 포함되어 있습니다. Theme.Holo 테마는 targetSdkVersion 이나 minSdkVersion 속성 중 아무거나 "11" 이상으로 설정할 때 기본 테마로 적용됩니다.


 여러분의 액티비티에 액션바를 추가 하기위해 간단하게 두 속성 중 아무거나 "11" 이상으로 설정합니다. 예를들어:

 <manifest ... >

    <uses-sdk android:minSdkVersion="11" ... />

    ...

</manifest>


Note : 만약 여러분이 커스텀 테마를 만들었다면, Theme.Holo 중 하나를 상속받았을 겁니다. 액션바 꾸미기에서 더 알아보겠습니다. 


 이제 Theme.Holo 를 적용한 모든 액티비티들에 액션바가 보일 겁니다. 이상입니다.



Android 2.0 이상에서 지원하기

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

 여러분이 Android 3.0 ( 최저 Android 2.0 ) 보다 이전 버전을 사용할 때 액션바를 추가하려면 여러분의 앱은 Android Support Library 를 포함 해야만 합니다.


시작하기위해, 개발자 사이트의 Support Library Setup 문서를 참고하여 v7 appcompat Library 를 추가합니다.( 개발자 사이트의 가이드에 있는 Adding library width resources의 명령을 따라하면서 한번 다운로드 된 library 패키지)


 여러분은 여러분의 앱에 통합된 Support Library 를 하나 가지고 있습니다.


1. ActionBarActivity 를 상속하도록 여러분의 Activity 를 수정합니다.

 public class MainActivity extends ActionBarActivity { ... }



2. 매니페스트 파일안에, <application>요소든  개별적인 <activity>요소든 아무곳이나 Theme.AppCompat 테마들 중 하나를 사용합니다.

 <activity android:theme="@style/Theme.AppCompat.Light" ... >

 

Note : 만약 여러분이 커스텀 테마를 만들었다면, Theme.AppCompat 테마들 중 하나를 상속받았을 겁니다. 액션바 꾸미기에서 더 알아보겠습니다. 


 이제 여러분의 액티비티는 Android 2.1( API level 7) 이상에서 실행할 때 액션바를 포함하게 됩니다.


매니페스트에 여러분의 앱이 지원하는 API level 을 적절하게 설정해야 한다는 것을 기억하세요.

 <manifest ... >

    <uses-sdk android:minSdkVersion="7"  android:targetSdkVersion="18" />

    ...

</manifest>


 

반응형

+ Recent posts