텍스트 크기를 자동으로 변경하는 공식 TextView

12108 단어
AutoSizeableTextView 정보
회사의 이전 버전에는 목록에 있는 항목마다 글자 수에 제한이 없는 텍스트를 보여 달라는 요구가 있었다.또한 각 항목의 폭은 고정되어 있기 때문에 전시된 텍스트가 너무 길면 생략호로 표시할 수 없고 텍스트의 글자 번호만 동적으로 조정하여 텍스트가 완전히 보일 수 있는 효과를 얻을 수 있으며 한 줄로 전시해야 한다.이 효과에 관해서는 사실 현재android 정부에서 이미 실현 방식을 제공하였다.바로 AutoSizeable TextView입니다.
글의 제목인 내가 AutoSizeable TextView에 더블 인덱스를 붙인 것은 사실 우리가 이 이름만 보면 이것은android가 새로 내놓은 기능이 더욱 강한 TextView 컨트롤러라고 생각하기 때문이다.그러나 만약 우리가 원본 코드에 점을 찍으면 사실 그것은 하나의 인터페이스라는 것을 발견할 수 있다.
이 인터페이스에 관해서는 상세한 상황은 스스로 읽어 주십시오.
https://developer.android.com/guide/topics/ui/look-and-feel/autosizing-textview
안드로이드 8.0에서 안드로이드는 위에서 설명한 이 효과를 실현하기 위한 인터페이스를 제공합니다.
물론 공식적으로 이 인터페이스를 내놓기 전에 이미 많은 인터넷 사례가 사용자 정의View를 통해 이 효과를 실현한 것으로 추정된다.
하지만 인정해야 할 점은 남이 공식적으로 제공한 것이 네가 실현한 것보다 믿음직스러워야 한다는 것이다. (신은 양해해 주십시오.)비록 이 인터페이스는 8.0에 제기되었지만 이전의 저버전도 이 효과를 실현할 수 있도록 정부에서 상응하는 호환 조치를 제공했다. 다음은 두 가지 방식에 대해 소개한다.
사용
XML에서 설정
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto" //   app    
        android:layout_width="match_parent"
        android:layout_height="@dimen/dimen_45">
    
        <android.support.v7.widget.AppCompatTextView
            android:layout_width="@dimen/dimen_105"
            android:layout_height="@dimen/dimen_32"
            android:maxLines="1"
            android:textSize="@dimen/dimen_sp_12"
            android:textColor="@color/button_r_b_font_color" 
            app:autoSizeTextType="uniform" //   TextView           (none       )
            app:autoSizeStepGranularity="@dimen/lib_search_dimen_sp_1"   //          
            app:autoSizeMinTextSize="@dimen/lib_search_dimen_sp_8" 
            app:autoSizeMaxTextSize="@dimen/lib_search_dimen_sp_12" /> 
    
    </RelativeLayout>
AppCompatTextView를 사용합니다. 구글이 오래된 버전을 호환하기 위해 제공한 새로운 클래스입니다. AutoSizeableTextView 인터페이스를 실현하고 xml에서 app 공간에 대응하는 몇 가지 속성을 도입함으로써 상기 컨트롤의 폭에 따라 문자의 크기에 적응하는 효과를 실현할 수 있습니다.
코드에서 동적 설정
우선, 레이아웃에서 컨트롤을 설명하고, AppCompatTextView를 성명해야 한다는 것을 주의하십시오.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="@dimen/dimen_45">

    <android.support.v7.widget.AppCompatTextView
        android:id="@+id/txt_price_section_item"
        android:layout_width="@dimen/dimen_105"
        android:layout_height="@dimen/dimen_32"
        android:background="@drawable/red_black_selector_bg"
        android:maxLines="1"
        android:textSize="@dimen/dimen_sp_12"
        android:textColor="@color/button_r_b_font_color" />
</RelativeLayout>
코드에서 번호 변경 설정
TextViewCompat.setAutoSizeTextTypeWithDefaults(
    textView, TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM); 
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(
    textView, 8, 25, 1, TypedValue.COMPLEX_UNIT_SP);
이 두 줄 코드의 첫 번째 방법은 TextView 번호를 설정하여 크기 조절 모드를 지원하는 것입니다.
두 번째 방법은 매개 변수의 명칭에 따라 우리도 의미를 추측할 수 있다. 위에서 xml로 정수리에 있는 몇 가지 속성과 같다. 여기서 나는 다시 설명하지 않는다(마지막 매개 변수는 사이즈 단위이다).
여기에 세 가지를 설명해야 하는데,
1. 우선 xml에서 설명하는 컨트롤이 AppCompatTextView가 되어야 하는 이유.위의 두 번째 메서드의 소스 코드를 클릭하여 살펴보겠습니다.
public static void setAutoSizeTextTypeUniformWithConfiguration(
    @NonNull TextView textView, int autoSizeMinTextSize, int autoSizeMaxTextSize, 
    int autoSizeStepGranularity, int unit) throws IllegalArgumentException {
        if (VERSION.SDK_INT >= 27) {
            textView.setAutoSizeTextTypeUniformWithConfiguration(autoSizeMinTextSize, autoSizeMaxTextSize, autoSizeStepGranularity, unit);
        } else if (textView instanceof AutoSizeableTextView) {
            ((AutoSizeableTextView)textView).setAutoSizeTextTypeUniformWithConfiguration(autoSizeMinTextSize, autoSizeMaxTextSize, autoSizeStepGranularity, unit);
        }
    }
보시다시피 오래된 버전을 호환하기 위해서입니다. 만약에 프로젝트가 27이하의 버전을 호환하지 않는다면 xml에서 TextView 컨트롤을 직접 설명할 수 있고 xml에서android로 성명한 몇 가지 속성을 직접 설정할 수 있습니다. app 공간에서의 속성을 도입할 필요가 없습니다.
27보다 낮을 때 이 TextView는 AutoSizeable TextView 유형에 속해야 한다. 앞에서 말했듯이 AppCompatTextView는 AutoSizeable TextView 인터페이스를 실현했기 때문에 오래된 버전을 호환하기 위해 xml에서 설명할 때 AppCompatTextView라고 성명해야 한다.
편집자: 첫 번째는 전제가 있어야 한다. 만약에 AppCompatActivity를 계승한다면 직접 사용할 수 있다. 시스템은 자동으로 TextView라는 tag를 AppCompatTextView 실례 대상으로 생성하지만 자신이 사용자 정의 등 조작을 했다면 반드시 AppCompatTextView를 계승해야 한다.
이전에도 관련 원리의 문장을 추천했다.
Android 2줄 코드 스킨케어 구현 appcompat-v7 원리에서 출발https://blog.csdn.net/ximsfei/article/details/54604310
2. 그 다음으로 주의해야 할 것은 컨트롤의 폭과 높이는 반드시 구체적인 값이 있어야 하며 wrap 로 설정할 수 없다는 것이다.content.넓이가 고정되지 않으면 넓이에 따라 글자 번호를 바꿀 수 없다는 점도 이해할 만하다.
3. 마지막으로 한 줄에 이 속성을 보여주는 것에 대해 평소에 우리는 두 가지 방식을 알아야 한다.바로singleLine="true"또는maxLines="1"입니다.내 위의 코드를 보면 두 가지 방식은 모두 maxLines='1'방식으로 설정한 것이고singleLine을 사용하면 예상한 효과를 나타낼 수 없습니다.
결어
이상은android가 공식적으로 제공하는 방법으로 TextView가 넓이에 따라 텍스트 크기를 자동으로 바꾸는 방식입니다!도움이 되었으면 좋겠습니다!

좋은 웹페이지 즐겨찾기