반응형

 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>


 

반응형
반응형

액션바(Action Bar)는 앱의 액티비티에서 구현할 수 있는 가장 중요한 디자인 요소 중 하나입니다. 액션바는 다른 앱들 사이에 일관성을 제공함으로서 사용자에게 친숙한 형식의 앱을 만들 수 있는 다양한 사용자 인터페이스 기능을 제공합니다.


주요 기능:

° 앱에서 사용자의 위치와 정체성을 제공하고 표시하기 위한 전용공간

° 잘 알려진 방법으로 중요한 작업에 접근할 수 있습니다.( 예 : 검색)

° 탐색과 보기 전환을 지원합니다.(탭 또는 드롭 다운 목록)


 


이 포스트는 액션바의 기본적인 사용을 위한 간단한 가이드를 제공합니다. 액션바의 다양한 기능을 알고 싶다면 개발자 사이트의 Action Bar 가이드를 참고하시기 바랍니다.


액션바 만들기

 여러분의 액티비티에 기본적인 액션바를 추가하는 방법을 배우게 됩니다. 여러분이 Android 3.0 이상 이거나 또는 Android 2.1 처럼 낮은 버전에서도 지원되록 할 겁니다.( Android Support Library를 사용하여)


액션 버튼들 추가하기

 액션바에 사용자 액션에 응답하도록 추가하는 방법을 배우게 됩니다.


액션바 꾸미기(Styling)

 액션바를 사용자가 원하는 모양으로 보이게 하는 방법을 배우게 됩니다.


액션바 덧붙이기

 여러분 레이아웃의 전면에 액션바를 덧붙이는 방법을 배우게 됩니다. 액션바를 숨기는 경우 원활한 전환을 허용하도록 합니다.

반응형
반응형

두번째 액티비티 만들기

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


액티비티의 모든 서브클래스들은 반드시 onCreate() 메소드를 구현해야만 합니다. 이 메소드는 액티비티가 메세지를 가지고 있는 인텐트를 받는 지역입니다. 또한 onCreate() 메소드는 반드시 setContentView() 메소드를 통해 액티비티 레이아웃을 정의해야만 합니다. 이 메소드는 액티비티 컴포넌트의 초기값을 설정하는 지역입니다.



안드로이드 스튜디오를 사용하여 새로운 액티비티 만들기


Android Studio는 여러분이 프로젝트를 만들 때 onCreate() 메소드를 오버라이드 해 놓습니다.


1. Android Studio 에서 java 디렉토리의 'com.mycompany.myfirstapp' 패키지를 선택하시고 마우스 오른쪽 버튼을 클릭합니다. 이어서 New > Activity > Blank Activity 를 선택합니다.


2. Choose option 창에서 액티비티 세부사항을 채웁니다.


° Activity Name : DisplayMessageActivity

° Layout Name : activity_display_message

° Title : My Message

° Hierarchical Parent : com.mycompany.myfirstapp.MyActivity

° Package name : com.company.myfirstapp


Finish 버튼을 클릭합니다.


 그림 1. Android Studio의 새로운 액티비티 생성 마법사


3. DisplayMessageActivity.java 파일을 엽니다.

 이 클래스는 이미 onCreate() 메소드의 구현을 포함하고 있습니다. 여러분은 나중에 이 메소드의 구현은 업데이트 할 것입니다. 또한 이미ActionBar 를 핸들링 하는 onOptionsItemSelected() 메소드의 구현도 포함되어 있습니다. 우선 이 두 메소드는 그냥 두겠습니다.


4. onCreateOptionMenu() 메소드는 제거합니다. 이 앱에서는 이 메소드가 필요하지 않습니다.


 여러분들이 Android Studio를 사용하여 개발한다면 지금 앱을 실행할 수 있습니다. Send 버튼을 클릭하여 두번째 액티비티를 시작합니다. 하지만 특별한 것이 없습니다. 템플릿에 의해 제공된 기본 "Hello world" 레이아웃을 사용하고 있기 때문입니다. 여러분은 곧 하나의 custom text view 를 보여주도록 업데이트 할 겁니다.



안드로이드 스튜디오 없이 액티비티 만들기


만약 여러분이 다른 IDE 를 사용하거나 command line tools 를 사용한다면 아래를 실행 합니다.


1. 프로젝트의 src/ 디렉토리에 DisplayMessageActivity.java 라는 파일을 생성합니다. 

2. 파일에 아래 내용을 추가하세요.

 public class DisplayMessageActivity extends ActionBarActivity {


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_display_message);


        if (savedInstanceState == null) {

            getSupportFragmentManager().beginTransaction()

                .add(R.id.container, new PlaceholderFragment()).commit();

        }

    }


    @Override

    public boolean onOptionsItemSelected(MenuItem item) {

        // Handle action bar item clicks here. The action bar will

        // automatically handle clicks on the Home/Up button, so long

        // as you specify a parent activity in AndroidManifest.xml.

        int id = item.getItemId();

        if (id == R.id.action_settings) {

            return true;

        }

        return super.onOptionsItemSelected(item);

    }


    /**

     * A placeholder fragment containing a simple view.

     */

    public static class PlaceholderFragment extends Fragment {


        public PlaceholderFragment() { }


        @Override

        public View onCreateView(LayoutInflater inflater, ViewGroup container,

                  Bundle savedInstanceState) {

              View rootView = inflater.inflate(R.layout.fragment_display_message,

                      container, false);

              return rootView;

        }

    }

}


Note: 만약 Android Studio 외에 다른 IDE 를 사용하신다면, setContentView() 메소드의 매개변수에 요구되어 있는activity_display_message 레이아웃을 포함하고 있지 않을 겁니다. 괜찮습니다. 왜냐하면 여러분은 나중이 이 레이아웃을 사용하지 않도록 업데이트 할 것이기 때문입니다.


3. strings.xml 파일에 아래처럼새로운 액티비티의 제목 텍스트를 추가합니다.

 <resources>

    ...

    <string name="title_activity_display_message">My Message</string>

</resources>



4. AndroidManifest.xml 메니페스트 파일의 Application 요소 안에 DisplaymessageActivity 에 대한 <activity> 요소를 추가합니다.

 <application ... >

    ...

    <activity

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

        android:label="@string/title_activity_display_message"

        android:parentActivityName="com.mycompany.myfirstapp.MyActivity" >

        <meta-data

            android:name="android.support.PARENT_ACTIVITY"

            android:value="com.mycompany.myfirstapp.MyActivity" />

    </activity>

</application>


android:parentActivityName 속성에 앱의 논리적 상속구조안에서 액티비티 부모의 이름을 선언합니다. 시스템은 Android 4.1(API16) 버전 이상에서 Up navigation 같은 기본 navigation 행동을 구현하기위한 값을 사용합니다. 여러분은 Support Library 의 사용과 <meta-data>요소의 사용을 통해 Android Studio의 예전 버전에서도 같은 navigation 기법을 사용할 수 있습니다.


Note : 여러분의 안드로이드 SDK 는 Adding SDK Package 단계에서 이미 최신버전의 Android Support Library 를 포함하도록 되어 있습니다. 안드로이드 스튜디오의 탬플릿을 사용한다면 이미 자동으로 여러분의 프로젝트에 Support Library 가 추가되어 있습니다. 여러분이 프로젝트에 library 를 추가하고 조작할 필요가 있다면 개발자 사이트의 setting up the Support Library 가이드를 따라해 보시고 오시기 바랍니다.


 만약 여러분이 Android Studio 외에 다른 IDE 를 사용하신다면 아직 앱이 컴파일하지 않는 것에 대해 걱정하지 마세요. 여러분은 곧 하나의 custom text view 를 보여주로록 액티비티를 업데이트 할 것입니다.




인텐트 받기(얻어오기)

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

모든 Activity 는 어떤 방식으로 전달되든 Intent 에 의해 발동됩니다. 여러분은 getIntent() 라는 메소드를 호출함으로서 액티비티를 시작했던 인텐트를 얻을 수 있습니다. 그리고 인텐트 안에 포함되어 있는 데이터를 되찾아 올 수 있습니다.


1. java/com.mycompany.myfirstapp 디렉토리의 DisplayMessageActivity.java 파일을 작성합니다.

2. onCreate() 메소드에서 아래 명령 줄을 제거합니다.

 setContentView(R.layout.activity_display_message);


3. 인텐트를 얻어오고 지역변수에 할당합니다.

 Intent intent = getIntent();


4. 파일의 가장 위해 Intent 클래스를 임포트 합니다.

 안드로이드 스튜디오에서는 Alt+Enter(Mac 에서는 option+return) 을 통해 자동으로 미스된 클래스들을 임포트 합니다.


5. getStringExtra() 메소드를 통해 MyActivity 로 부터 전달된 message 를 추출합니다.

 String message = intent.getStringExtra(MyActivity.EXTRA_MESSAGE);




메세지 디스플레이 하기

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

1. onCreate() 메소드안에 TextView 객체를 생성합니다.

 

  TextView textView = new TextView(this);

 


2. text 의 사이즈를 설정하고 setText() 로 메세지를 설정합니다.

 

 

   textView.setTextSize(40);

  textView.setText(message);

 


3. 그리고 나서 TextView 를 setContentView() 메소드의 매개변수로 전달하여 액티비티 레이아웃의 root View 로서 추가합니다.

  setContentView(textView);


4. DisplayMessageActivity  onCreate() 를 완성하면 아래처럼 보입니다.

 @Override

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Get the message from the intent
    Intent intent = getIntent();
    String message = intent.getStringExtra(MyActivity.EXTRA_MESSAGE);

    // Create the text view
    TextView textView = new TextView(this);
    textView.setTextSize(40);
    textView.setText(message);

    // Set the text view as the activity layout
    setContentView(textView);
}


 여러분은 지금 앱을 실행시킬 수 있습니다. 앱이 실행되면 Text field(EditText)에 메세지를 타이핑하고 Send 버튼을 클릭합니다. 그리고 나면 두번째 액티비티에 메세지가 나타납니다.


 


그림 2. Android 4.4 에서 실행한 두개의 액티비티 화면


이것으로 여러분은 첫번째  안드로이드 앱을 만들어 봤습니다.


다음 포스트에서 다음 내용을 배워보겠습니다.

반응형

+ Recent posts