ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    반응형
Designed by Tistory.