Android 지원 라이브러리 23.2의 새로운 기능
새로운 기능:
벡터 드로어블 및 애니메이션 벡터 드로어블 지원
벡터 드로어블을 사용하면 여러 png를 XML 리소스에 정의된 벡터 이미지로 바꿀 수 있습니다. 이전에는 이 사용이 Lollipop 이상 장치로 제한되었지만 이제 VectorDrawable 및 AnimatedVectorDrawable은 각각 두 개의 새로운 지원 라이브러리인 support-Vector-drawable 및 support-animated-Vector-drawable을 통해 사용할 수 있습니다.
Android Studio 1.4에는 컴파일 타임에 png를 생성하여 벡터 드로어블에 대한 제한된 지원을 제공하는 방법이 도입되었습니다. 이 기능을 비활성화하려면(지원 라이브러리 공간을 절약하고 새 라이브러리의 이점을 실제로 활용) build.gradle 파일에 vectorDrawables.useSupportLibrary = true를 추가해야 합니다.
// Gradle 플러그인 2.0 p>
android {
defaultConfig {
VectorDrawables.useSupportLibrary = true
}
}
필수 이 새로운 속성은 Gradle 플러그인 버전 2.0에서만 사용할 수 있습니다. Gradle 1.5를 사용하는 경우
// Gradle 플러그인 1.5
android {
defaultConfig {
generatedDensities = [를 사용해야 합니다. ]
}
// 이는 2.0 Gradle 플러그인에 의해 처리됩니다.
aaptOptions {
additionalParameters "--no- version-Vectors"
}
}
API7과 호환되는 VectorDrawableCompat과 API11 이상과 호환되는 AnimatedVectorDrawableCompat를 사용할 수 있습니다. Android가 드로어블을 로드하는 방식으로 인해 드로어블 ID(예: XML 파일)를 허용하는 모든 위치에서 벡터 드로어블 로드를 지원하는 것은 아닙니다. 다행히 AppCompat에는 새로운 벡터 드로어블을 더 쉽게 사용할 수 있도록 여러 기능이 추가되었습니다.
먼저 ImageView(또는 ImageButton 및 FloatingActionButton과 같은 하위 클래스)와 함께 AppCompat을 사용할 때 벡터 드로어블에 대한 새로운 app:srcCompat 속성을 사용할 수 있습니다(다른 드로어블은 android:src를 사용함).
p>lt; ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
앱: srcCompat="@drawable /ic_add" /gt;
또한 런타임 시 드로어블을 동적으로 변경하려는 경우 이전과 동일한 setImageResource() 메서드를 사용할 수 있습니다. 이는 변경되지 않았습니다. AppCompat 및 앱 사용: srcCompat은 앱에 벡터 드로어블을 통합하는 가장 쉽고 안정적인 방법입니다.
app:srcCompat 외부에서 직접 벡터 드로어블을 참조하는 것은 Lollipop 이전에 실패할 것입니다. 그러나 AppCompat은 벡터 드로어블을 로드하기 위해 StateListDrawable, InsetDrawable, LayerDrawable, LevelListDrawable 또는 RotateDrawable과 같은 다른 드로어블 컨테이너를 지원합니다. 이 간접적인 방법을 사용하면 이 경우 일반적인 상황에서 벡터 드로어블을 지원하지 않는 TextView의 android:drawableLeft 속성과 같은 벡터 드로어블을 사용할 수 있습니다.
AppCompat 밤과 낮 테마
다양한 앱 버전에서 벡터 이미지를 사용할 수 있다는 점은 큰 변화이지만, 이번 버전은 AppCompat에 새로운 테마도 추가합니다:Theme .AppCompat.DayNight.
API 14 이전에는 DayNight 테마와 그 후속 DayNight.NoActionBar, DayNight.DarkActionBar, DayNight.Dialog 등이 조명과 동일했습니다. 그러나 API 14a 이상 기기에서는 이 테마를 사용하면 앱이 밝은 테마와 어두운 테마를 모두 쉽게 지원할 수 있습니다. '밤'인지 여부에 따라 밝은 테마에서 어두운 테마로 전환할 수 있습니다.
기본적으로 'night'가 시스템 값(UiModeManager.getNightMode()에서 가져옴)에 해당하는지 여부이지만 AppCompatDelegate의 메서드를 사용하여 이 값을 재정의할 수 있습니다. 전체 앱에서 실행되는 이 기본값의 경우(프로세스가 다시 시작될 때까지) 정적 AppCompatDelegate.setDefaultNightMode() 메서드를 사용하여 설정하거나 getDelegate()를 통해 AppCompatDelegate를 가져오고 setLocalNightMode()를 사용하여 변경할 수 있습니다. 현재 활동 또는 대화 상자.
AppCompatDelegate.MODE_NIGHT_AUTO를 사용할 때 낮과 밤 사이를 자동으로 전환하는 데 시간과 가장 가까운 위치(앱에 지리적 위치 권한이 있는 경우)가 사용되며, MODE_NIGHT_NO 및 MODE_NIGHT_YES는 각각 강제 전환에 사용됩니다. . 테마는 어두운 테마를 사용하지 않거나 항상 사용합니다.
DayNight 테마를 사용할 때는 앱을 철저히 테스트해야 합니다. 하드 코딩된 색상으로 인해 텍스트와 아이콘의 읽기가 어려워질 수 있기 때문입니다. 텍스트가 표준 TextAppearance.AppCompat 스타일을 사용하거나 테마(예: android:textColorPrimary)에서 색상을 가져온 경우 자동으로 업데이트됩니다.
그러나 특별히 야간 모드용으로 리소스를 사용자 정의하려는 경우 AppCompat의 야간 리소스 한정자 폴더에서 필요한 모든 리소스를 사용자 정의할 수 있습니다. 이 모드를 더 쉽게 지원하려면 표준 색상을 사용하거나 AppCompat의 색조를 활용하는 것이 좋습니다.
디자인 지원 라이브러리: 바텀 시트
디자인 지원 라이브러리는 다양한 머티리얼 디자인 디자인 패턴의 구현을 제공합니다. 이 버전을 사용하면 개발자가 앱에 바텀 시트를 쉽게 추가할 수 있습니다.
CoordinatorLayout의 하위 보기에 대해 BottomSheetBehavior를 설정하면(예: app:layout_behavior="android.support.design.widget.BottomSheetBehavior") 5개 사이를 전환할 수 있는 터치 감지가 자동으로 제공됩니다. 상태. 함수:
STATE_COLLAPSED: 접힌 상태이며 기본 상태입니다. 하단 가장자리에 레이아웃의 일부를 표시하면 됩니다. 높이는 app:behavior_peekHeight 속성을 사용하여 제어할 수 있습니다(기본값은 0).
STATE_DRAGGING: 사용자가 바텀 시트를 직접 상하로 드래그하는 중간 상태입니다.
STATE_SETTLING: 뷰가 해제되어 최종 위치에 도달한 순간입니다.
STATE_EXPANDED: 하단 시트가 완전히 확장되었습니다. 전체 하단 시트가 표시되거나(높이가 포함된 CoordinatorLayout보다 작은 경우) 전체 CoordinatorLayout이 채워집니다.
STATE_HIDDEN: 기본적으로 비활성화됨 예(활성화하려면 app:behavior_hideable 속성 사용), 활성화되면 사용자가 하단 시트에서 아래로 슬라이드하여 하단 시트를 완전히 숨길 수 있습니다.
하단 시트의 스크롤 컨테이너는 중첩 스크롤을 지원해야 합니다(예: NestedScrollView, RecyclerView 또는 API 21의 ListView/ScrollView).
상태 콜백을 받으려면 BottomSheetCallback을 추가하면 됩니다.
// BottomSheetBehavior 뷰가 있는 뷰 BottomSheet = coordinatorLayout.findViewById(R.id.bottom_sheet) ;
BottomSheetBehavior 동작 = BottomSheetBehavior.from(bottomSheet);
behavior.setBottomSheetCallback(new BottomSheetCallback() {
@Override
공개 void onStateChanged(@NonNull View BottomSheet, int newState) {
// 상태 변경에 반응
}
@Override
공개 void onSlide(@NonNull View BottomSheet, float SlideOffset) {
// 드래그 이벤트에 반응
}
});
BottomSheetBehavior는 영구 하단 시트 시나리오를 대상으로 하지만 이 버전은 모달 하단 시트의 사용 사례를 완료하기 위해 BottomSheetDialog 및 BottomSheetDialogFragment도 제공합니다. AppCompatDialog 또는 AppCompatDialogFragment를 해당 바텀 시트 버전으로 바꾸세요. 대화 상자에 하단 시트 스타일 스타일을 사용하십시오.
지원 v4: MediaBrowserServiceCompat
지원 v4 라이브러리는 많은 지원 라이브러리의 기반 역할을 하며 최신 버전에 도입된 많은 프레임워크 기능(여러 가지 고유 기능 포함)을 포함합니다.
이전 버전에 추가된 MediaSessionCompat 클래스는 미디어 재생을 위한 견고한 기반을 제공합니다. 이 버전에서는 최신 API(Marshmallow에 추가된 API 포함)를 API 4와 호환되도록 만들기 위해 MediaBrowserServiceCompat을 추가했습니다. 이상. 이를 통해 Android Auto에서 오디오 재생을 지원하고 Android Wear에서 미디어 탐색을 훨씬 쉽게 지원할 수 있습니다. 또한 미디어 재생 서비스와 UI를 연결하기 위한 표준 인터페이스를 제공합니다.
RecyclerView
RecyclerView 컨트롤은 목록과 그리드 생성을 위한 유연한 기본 솔루션을 제공하고 애니메이션도 지원합니다. 이번 릴리스에서는 LayoutManager API에 자동 측정이라는 매우 흥미로운 새 기능을 도입했습니다! RecyclerView가 콘텐츠 크기에 따라 자체적으로 크기를 조정할 수 있도록 허용합니다. 이는 RecyclerView 차원에서 WRAP_CONTENT를 사용하는 등 이전에는 해결할 수 없었던 시나리오가 가능해짐을 의미합니다.
이제 내장된 모든 LayoutManager가 자동 측정을 지원하는 것을 확인할 수 있습니다.
이 변경으로 인해 항목 보기의 레이아웃 매개변수를 주의 깊게 확인해야 합니다. 이전에 자동으로 무시되었던 레이아웃 매개변수(예: 스크롤 방향의 MATCH_PARENT)가 이제 완전히 고려됩니다. 내장된 LayoutManager에서 상속되지 않는 사용자 정의 LayoutManager가 있는 경우 이는 선택적 API입니다. setAutoMeasureEnabled(true)를 호출하고 이 메소드에 대한 Javadoc에 설명된 대로 몇 가지 사소한 변경을 수행해야 합니다.
RecyclerView는 자체 하위 뷰에 애니메이션을 적용할 수 있지만 자체 경계 변경에는 애니메이션을 적용할 수 없습니다. RecyclerView의 경계 변경 사항에 애니메이션을 적용하려면 Transition API를 사용할 수 있습니다.
사용자 정의 탭
사용자 정의 탭은 앱의 스타일과 모양을 유지하면서 웹 콘텐츠 페이지로 원활하게 전환할 수 있습니다. 이 버전에서는 웹 콘텐츠 옆에 나타나는 하단 표시줄에 작업을 추가할 수 있습니다. 참고: 이전에는 상단의 더보기 메뉴에서만 추가할 수 있었습니다.
새로운 addToolbarItem() 메소드를 사용하면 하단 표시줄에 최대 5개(MAX_TOOLBAR_ITEMS)개의 작업을 추가하고 setToolbarItem()을 사용하여 업데이트할 수 있습니다. 이전 setToolbarColor() 메서드와 유사하게 setSecondaryToolbarColor() 메서드를 사용하여 하단 표시줄의 배경색을 맞춤 설정할 수 있습니다.
Android TV용 Leanback
Leanback 라이브러리는 앱을 Android TV로 가져오는 데 필요한 도구를 제공합니다. 특히 TV에 최적화된 컨트롤이 많이 있습니다. 이 버전의 GuidedStepFragment에는 여러 가지 주요 개선 사항이 포함되어 있습니다.
아마도 가장 큰 변화는 작업 버튼의 두 번째 열(onCreateButtonActions()을 재정의하거나 setButtonActions()를 호출하여 추가됨)의 도입일 것입니다. 모든 작업에 도달하기 위해 GuidedActions 목록을 스크롤할 필요가 없습니다.
GuiddAction에 관해 말하자면, 편집 가능한 설명(descriptionEditable()을 통해), 양식 드롭다운의 하위 작업(subActions() 사용) 및 GuidedDatePickerAction을 포함하여 입력을 더욱 풍부하게 만드는 몇 가지 새로운 기능이 있습니다.