-
What's new in Support Library프로그래밍/Android 2017. 6. 7. 00:53반응형
우리가 사용하는 TextView는 non-resizing으로 사이즈를 직접 입력해줘야했다. Android O부터는 Android 시스템이 TextView에게 텍스트 사이즈를 자동적으로 늘리고 줄일 수 있도록 알려준다. TextView의 문자를 기반으로 Layout Bound 안에 텍스트 사이즈를 자동으로 채워준다. Dinamically하게 콘텐츠와 화면 사이즈를 계산에서 TextView 텍스트 사이즈를 맞춰준다.
TextView에 XML에서나 Programmatically하게 Auto-Sizing을 지원하는 방법은 3가지가 있다.
Default
auto-scaling이 Default 값으로 진행된다. autoSizeTextType은 none이거나 uniform으로 설정한다.
Auto-scaling의 Default Dimension은 minTextSize = 12sp, maxTextSize = 112sp, and granularity = 1px 이다. 아무리 TextView의 콘텐츠가 작거나 많아도 12sp~112sp 사이에서 Auto-scaling이 된다. granularity는 auto-scaling step 별 사이즈이며 1px씩 증감된다.
XML <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:autoSizeTextType="uniform" /> Java
TextView.setAutoSizeTextTypeWithDefaults(@AutoSizeTextType int autoSizeTextType)
Granularity
minimum, maximum Text Size와 granularity를 지정할 수 있다.
XML <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:autoSizeTextType="uniform" android:autoSizeMinTextSize="12sp" android:autoSizeMaxTextSize="100sp" android:autoSizeStepGranularity="2sp" />
Java
TextView.setAutoSizeTextTypeUniformWithConfiguration(
int autoSizeMinTextSize,
int autoSizeMaxTextSize,
int autoSizeStepGranularity, int unit)
Preset Sizes
TextView가 Auto-scaling할 때, 선택할 font size를 여러개 지정할 수 있다. 단말 사이즈, TextView의 너비, 높이를 계산해 TextView의 Text 사이즈가 적절한 크기로 지정된다.
XML <resources> <array name="autosize_text_sizes"> <item>10sp</item> <item>12sp</item> <item>20sp</item> <item>40sp</item> <item>100sp</item> </array> </resources> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:autoSizeTextType="uniform" android:autoSizePresetSizes="@array/autosize_text_sizes" /> Java TextView.setAutoSizeTextTypeUniformWithPresetSizes( int[] presetSizes, int unit)
Support Library는 API Level 14 (v4) 부터 지원되며 Support Library 26 버전에 포함되어있다.
Support Library로 이용하기 위해서는
TextViewCompat.setAutoSizeTextTypeWithDefaults( TextView textview, int autoSizeTextType)
와 같이 TextViewCompat class를 이용해서 정의하면 된다.
XML에서는 다음과 같다.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" app:autoSizeTextType="uniform"/> />
사용 예시는 페이스북 / 라인의 타임라인 한줄 게시물이겠다.
새로운 방법들
https://developer.android.com/preview/features/autosizing-textview.html
https://medium.com/@1priyank1/autosizing-textviews-android-o-656e0f075cfb
https://developer.android.com/topic/libraries/support-library/revisions.html#26-0-0-alpha1
반응형'프로그래밍 > Android' 카테고리의 다른 글
과연 Activity/Fragment가 Finished되면 View Model은 어떻게 될까? (0) 2017.08.29 지니모션 Googleplay 설치 (0) 2017.07.31 Android O, Background Check and other insights into the evolution of the Android Operating System Framework (0) 2017.06.07 Google i/o 2017 Android & ML 정리 (0) 2017.06.06 Android API -1 (0) 2017.04.10