다음을 통해 공유


도구 모음 호환성

개요

이 섹션에서는 Android 5.0 Lollipop 이전 버전의 Android에서 사용하는 Toolbar 방법을 설명합니다. 앱이 Android 5.0 이전 버전의 Android를 지원하지 않는 경우 이 섹션을 건너뛸 수 있습니다.

Toolbar Android v7 지원 라이브러리의 일부이므로 Android 2.1(API 수준 7) 이상을 실행하는 디바이스에서 사용할 수 있습니다. 그러나 이 라이브러리에 제공된 구현을 사용하도록 Toolbar Android 지원 라이브러리 v7 AppCompat NuGet을 설치하고 코드를 수정해야 합니다. 이 섹션에서는 이 NuGet을 설치하고 두 번째 도구 모음 추가에서 ToolbarFun 앱을 수정하여 Lollipop 5.0 이전 버전의 Android에서 실행되는 방법을 설명합니다.

AppCompat 버전의 도구 모음을 사용하도록 앱을 수정하려면 다음을 수행합니다.

  1. 앱의 최소 및 대상 Android 버전을 설정합니다.

  2. AppCompat NuGet 패키지를 설치합니다.

  3. 기본 제공 Android 테마 대신 AppCompat 테마를 사용합니다.

  4. 가 아닌 Activity서브클래싱되도록 수정 MainActivity 합니다AppCompatActivity.

이러한 각 단계는 다음 섹션에서 자세히 설명합니다.

최소 및 대상 Android 버전 설정

앱의 대상 프레임워크는 API 수준 21 이상으로 설정해야 합니다. 그렇지 않으면 앱이 제대로 배포되지 않습니다. 앱을 배포하는 동안 패키지 'android'에서 'tileModeX' 특성에 대한 리소스 식별자를 찾을 수 없는 것과 같은 오류가 표시되는 경우 대상 프레임워크가 Android 5.0(API 수준 21 - Lollipop) 이상으로 설정되지 않았기 때문입니다.

대상 프레임워크 수준을 API 수준 21 이상으로 설정하고 Android API 수준 프로젝트 설정을 앱이 지원할 최소 Android 버전으로 설정합니다. Android API 수준 설정에 대한 자세한 내용은 Android API 수준 이해를 참조 하세요. ToolbarFun 이 예제에서 최소 Android 버전은 KitKat(API 수준 4.4)로 설정됩니다.

AppCompat NuGet 패키지 설치

다음으로, Android 지원 라이브러리 v7 AppCompat 패키지를 프로젝트에 추가합니다. Visual Studio에서 참조를 마우스 오른쪽 단추로 클릭하고 NuGet 패키지 관리를 선택합니다. 찾아보기를 클릭하고 Android 지원 라이브러리 v7 AppCompat을 검색합니다. Xamarin.Android.Support.v7.AppCompat을 선택하고 설치를 클릭합니다.

NuGet 패키지 관리에서 선택한 V7 Appcompat 패키지의 스크린샷

이 NuGet이 설치되면 아직 없는 경우 다른 여러 NuGet 패키지도 설치됩니다(예: Xamarin.Android.Support.Animated.Vector.Drawable, Xamarin.Android.Support.v4Xamarin.Android.Support.Vector.Drawable). NuGet 패키지 설치에 대한 자세한 내용은 연습: 프로젝트에 NuGet 포함을 참조하세요.

AppCompat 테마 및 도구 모음 사용

AppCompat 라이브러리에는 AppCompat 라이브러리에서 지원하는 모든 버전의 Android에서 사용할 수 있는 몇 가지 Theme.AppCompat 테마가 함께 제공됩니다. ToolbarFun 예제 앱 테마는 Lollipop 이전의 Android 버전에서 사용할 수 없는 파생Theme.Material.Light.DarkActionBar됩니다. 따라서 ToolbarFun 이 테마 Theme.AppCompat.Light.DarkActionBar에 대한 AppCompat 대응을 사용하도록 조정해야 합니다. 또한 Lollipop 이전 버전의 Android에서는 사용할 수 없으므로 Toolbar AppCompat 버전을 Toolbar사용해야 합니다. 따라서 레이아웃은 android.support.v7.widget.Toolbar Toolbar.

레이아웃 업데이트

Resources/layout/Main.axml을 편집하고 요소를 다음 XML로 바꿉 Toolbar 니다.

<android.support.v7.widget.Toolbar
    android:id="@+id/edit_toolbar"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorAccent"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

리소스/레이아웃/toolbar.xml 편집하고 해당 내용을 다음 XML로 바꿉니다.

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>

값은 ?attr 더 이상 접두사로 android: 지정되지 않습니다(표기법이 현재 테마의 ? 리소스를 참조한다는 점을 기억하세요). 여기서 계속 사용되는 경우 ?android:attr Android는 AppCompat 라이브러리가 아닌 현재 실행 중인 플랫폼에서 특성 값을 참조합니다. 이 예제에서는 AppCompat 라이브러리 android: 에서 정의한 것을 사용 actionBarSize 하므로 접두사는 삭제됩니다. 마찬가지로@android:style, 특성이 AppCompat 라이브러리 ThemeOverlay.AppCompat.Dark.ActionBarandroid:theme 테마로 설정되도록 변경 @style 됩니다. 테마가 대신 ThemeOverlay.Material.Dark.ActionBar여기에 사용됩니다.

스타일 업데이트

리소스/값/styles.xml 편집하고 해당 내용을 다음 XML로 바꿉니다.

<?xml version="1.0" encoding="utf-8" ?>
<resources>
  <style name="MyTheme" parent="MyTheme.Base"> </style>
  <style name="MyTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="colorPrimary">#5A8622</item>
    <item name="colorAccent">#A88F2D</item>
  </style>
</resources>

이 예제의 항목 이름 및 부모 테마는 AppCompat 라이브러리를 사용하므로 더 이상 접두 android: 사로 지정되지 않습니다. 또한 부모 테마는 AppCompat 버전의 Light.DarkActionBar.로 변경됩니다.

업데이트 메뉴

이전 버전의 Android를 지원하기 위해 AppCompat 라이브러리는 네임스페이스의 android: 특성을 미러 사용자 지정 특성을 사용합니다. 그러나 일부 특성(예: showAsAction 태그에 <menu> 사용된 특성)은 이전 디바이스 showAsAction 의 Android 프레임워크에 존재하지 않습니다. Android API 11에서 도입되었지만 Android API 7에서는 사용할 수 없습니다. 이러한 이유로 사용자 지정 네임스페이스를 사용하여 지원 라이브러리에서 정의한 모든 특성의 접두사를 지정해야 합니다. 메뉴 리소스 파일에서 특성 접두사를 지정하기 위해 호출 local 되는 네임스페이 showAsAction 스가 정의됩니다.

리소스/메뉴/top_menus.xml 편집하고 해당 내용을 다음 XML로 바꿉니다.

<?xml version="1.0" encoding="utf-8" ?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:local="http://schemas.android.com/apk/res-auto">
  <item
       android:id="@+id/menu_edit"
       android:icon="@mipmap/ic_action_content_create"
       local:showAsAction="ifRoom"
       android:title="Edit" />
  <item
       android:id="@+id/menu_save"
       android:icon="@mipmap/ic_action_content_save"
       local:showAsAction="ifRoom"
       android:title="Save" />
  <item
       android:id="@+id/menu_preferences"
       local:showAsAction="never"
       android:title="Preferences" />
</menu>

local 네임스페이스는 다음 줄과 함께 추가됩니다.

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

특성 앞에는 showAsAction 이 네임스페이 local: 스가 아닌 android:

local:showAsAction="ifRoom"

마찬가지로 리소스/메뉴/edit_menus.xml 편집하고 해당 내용을 다음 XML로 바꿉니다.

<?xml version="1.0" encoding="utf-8" ?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:local="http://schemas.android.com/apk/res-auto">
  <item
       android:id="@+id/menu_cut"
       android:icon="@mipmap/ic_menu_cut_holo_dark"
       local:showAsAction="ifRoom"
       android:title="Cut" />
  <item
       android:id="@+id/menu_copy"
       android:icon="@mipmap/ic_menu_copy_holo_dark"
       local:showAsAction="ifRoom"
       android:title="Copy" />
  <item
       android:id="@+id/menu_paste"
       android:icon="@mipmap/ic_menu_paste_holo_dark"
       local:showAsAction="ifRoom"
       android:title="Paste" />
</menu>

이 네임스페이스 스위치는 API 수준 11 이전의 Android 버전에서 특성을 어떻게 지원 showAsAction 하나요? AppCompat NuGet이 설치될 때 사용자 지정 특성 showAsAction 및 가능한 모든 값이 앱에 포함됩니다.

하위 클래스 AppCompatActivity

변환의 마지막 단계는 하위 클래스AppCompatActivity가 되도록 수정 MainActivity 하는 것입니다. MainActivity.cs 편집하고 다음 using 문을 추가합니다.

using Android.Support.V7.App;
using Toolbar = Android.Support.V7.Widget.Toolbar;

AppCompat 버전Toolbar으로 선언됩니다Toolbar. 다음으로, 다음의 MainActivity클래스 정의를 변경합니다.

public class MainActivity : AppCompatActivity

작업 표시줄을 AppCompat 버전의 AppCompat으로 Toolbar설정하려면 호출을 로 SetSupportActionBar대체합니다SetActionBar. 이 예제에서는 AppCompat 버전의 Toolbar 사용 중임을 나타내기 위해 제목도 변경됩니다.

SetSupportActionBar (toolbar);
SupportActionBar.Title = "My AppCompat Toolbar";

마지막으로 최소 Android 수준을 지원되는 사전 Lollipop 값(예: API 19)으로 변경합니다.

앱을 빌드하고 사전 Lollipop 디바이스 또는 Android 에뮬레이터에서 실행합니다. 다음 스크린샷은 KitKat(API 19)을 실행하는 Nexus 4의 ToolbarFun AppCompat 버전을 보여 줍니다.

KitKat 디바이스에서 실행되는 앱의 전체 스크린샷, 두 도구 모음 모두 표시

AppCompat 라이브러리를 사용하는 경우 Android 버전에 따라 테마를 전환할 필요가 없습니다. AppCompat 라이브러리를 사용하면 지원되는 모든 Android 버전에서 일관된 사용자 환경을 제공할 수 있습니다.