اندازه خودکار TextViews

با Android 8.0 (سطح API 26) و بالاتر، می‌توانید به TextView دستور دهید تا اندازه متن را به طور خودکار بزرگ یا منقبض کند تا طرح‌بندی آن بر اساس ویژگی‌ها و مرزهای TextView پر شود. این تنظیم بهینه سازی اندازه متن را در صفحات مختلف با محتوای پویا آسان تر می کند.

کتابخانه پشتیبانی 26.0 به طور کامل از ویژگی اندازه‌گیری خودکار TextView در دستگاه‌های دارای نسخه اندروید 8.0 (سطح API 26) یا پایین‌تر پشتیبانی می‌کند. بسته android.support.v4.widget شامل کلاس TextViewCompat برای دسترسی به ویژگی‌ها به روشی سازگار با عقب است.

اندازه خودکار TextView را تنظیم کنید

می‌توانید از چارچوب یا کتابخانه پشتیبانی برای تنظیم اندازه خودکار TextView به صورت برنامه‌نویسی یا XML استفاده کنید. برای تنظیم ویژگی های XML، می توانید از پنجره Properties در Android Studio نیز استفاده کنید.

سه راه برای تنظیم اندازه خودکار TextView وجود دارد که در بخش های زیر توضیح داده شده است:

توجه : اگر اندازه خودکار را در یک فایل XML تنظیم کرده اید، استفاده از مقدار "wrap_content" را برای ویژگی های layout_width یا layout_height یک TextView توصیه نمی کنیم. انجام این کار ممکن است نتایج غیرمنتظره ای به همراه داشته باشد.

پیش فرض

تنظیم پیش فرض به اندازه خودکار مقیاس TextView به طور یکنواخت در محورهای افقی و عمودی اجازه می دهد.

  • برای تعریف تنظیمات پیش فرض به صورت برنامه ای، متد setAutoSizeTextTypeWithDefaults(int autoSizeTextType) را فراخوانی کنید. AUTO_SIZE_TEXT_TYPE_NONE را برای خاموش کردن ویژگی اندازه‌گیری خودکار یا AUTO_SIZE_TEXT_TYPE_UNIFORM را برای مقیاس‌بندی محورهای افقی و عمودی به طور یکنواخت ارائه دهید.
  • توجه : ابعاد پیش‌فرض برای مقیاس‌بندی یکنواخت minTextSize = 12sp ، maxTextSize = 112sp ، و granularity = 1px.

  • برای تعریف تنظیمات پیش‌فرض در XML، از فضای نام android استفاده کنید و ویژگی autoSizeTextType را روی none یا uniform قرار دهید.
  • <?xml version="1.0" encoding="utf-8"?>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:autoSizeTextType="uniform" />
    

تنظیمات پیش فرض را با استفاده از کتابخانه پشتیبانی تعریف کنید

  • برای تعریف تنظیمات پیش فرض از طریق برنامه نویسی از طریق کتابخانه پشتیبانی، روش TextViewCompat.setAutoSizeTextTypeWithDefaults(TextView textview, int autoSizeTextType) را فراخوانی کنید. نمونه ای از ویجت TextView و یکی از انواع متن، مانند TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE یا TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM ارائه دهید.
  • برای تعریف تنظیمات پیش‌فرض در XML از طریق کتابخانه پشتیبانی، از فضای نام app استفاده کنید و ویژگی autoSizeTextType را روی none یا uniform قرار دهید.
  • <?xml version="1.0" encoding="utf-8"?>
    <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="match_parent">
    
      <TextView
          android:layout_width="match_parent"
          android:layout_height="200dp"
          app:autoSizeTextType="uniform" />
    
    </LinearLayout>
    

دانه بندی

شما می توانید محدوده ای از حداقل و حداکثر اندازه متن و ابعادی که اندازه هر مرحله را مشخص می کند، تعریف کنید. TextView به طور یکنواخت در محدوده ای بین ویژگی های حداقل و حداکثر اندازه مقیاس می شود. هر افزایش به عنوان اندازه مرحله تنظیم شده در ویژگی granularity رخ می دهد.

  • برای تعریف طیفی از اندازه های متن و ابعاد به صورت برنامه نویسی، روش setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit) را فراخوانی کنید. حداکثر مقدار، حداقل مقدار، مقدار دانه بندی و هر واحد بعدی TypedValue را ارائه دهید.
  • برای تعریف محدوده ای از اندازه متن و ابعاد در XML، از فضای نام android استفاده کنید و ویژگی های زیر را تنظیم کنید:
    • ویژگی autoSizeTextType را روی none یا uniform قرار دهید. مقدار none پیش‌فرض است و یکنواخت به TextView اجازه می‌دهد به طور یکنواخت در محورهای افقی و عمودی مقیاس شود.
    • ویژگی های autoSizeMinTextSize ، autoSizeMaxTextSize و autoSizeStepGranularity را برای تعیین ابعاد برای اندازه گیری خودکار TextView تنظیم کنید.
  • <?xml version="1.0" encoding="utf-8"?>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:autoSizeTextType="uniform"
        android:autoSizeMinTextSize="12sp"
        android:autoSizeMaxTextSize="100sp"
        android:autoSizeStepGranularity="2sp" />
    

با استفاده از کتابخانه پشتیبانی، جزئیات را تعریف کنید

  • برای تعریف طیفی از اندازه‌های متن و ابعاد به صورت برنامه‌نویسی از طریق کتابخانه پشتیبانی، روش TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit) را فراخوانی کنید. حداکثر مقدار، حداقل مقدار، مقدار دانه بندی و هر واحد بعدی TypedValue را ارائه دهید.
  • برای تعریف طیفی از اندازه‌های متن و ابعاد در XML از طریق کتابخانه پشتیبانی، از فضای نام app استفاده کنید و ویژگی‌های autoSizeText ، autoSizeMinTextSize ، autoSizeMaxTextSize و autoSizeStepGranularity را در فایل XML طرح‌بندی تنظیم کنید.
  • <?xml version="1.0" encoding="utf-8"?>
    <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="match_parent">
    
      <TextView
          android:layout_width="match_parent"
          android:layout_height="200dp"
          app:autoSizeTextType="uniform"
          app:autoSizeMinTextSize="12sp"
          app:autoSizeMaxTextSize="100sp"
          app:autoSizeStepGranularity="2sp" />
    
    </LinearLayout>
    

اندازه های از پیش تعیین شده

اندازه های از پیش تعیین شده به شما امکان می دهد مقادیری را که TextView هنگام اندازه گیری خودکار متن انتخاب می کند، مشخص کنید.

  • برای استفاده از اندازه های از پیش تعیین شده برای تنظیم اندازه خودکار TextView به صورت برنامه ای، روش setAutoSizeTextTypeUniformWithPresetSizes(int[] presetSizes, int unit) را فراخوانی کنید. آرایه ای از اندازه ها و هر واحد بعدی TypedValue را برای اندازه ارائه دهید.
  • برای استفاده از اندازه های از پیش تعیین شده برای تنظیم اندازه خودکار TextView در XML، از فضای نام android استفاده کنید و ویژگی های زیر را تنظیم کنید:
    • ویژگی autoSizeTextType را روی none یا uniform قرار دهید. مقدار none پیش‌فرض است و یکنواخت به TextView اجازه می‌دهد به طور یکنواخت در محورهای افقی و عمودی مقیاس شود.
    • ویژگی autoSizePresetSizes را روی آرایه ای از اندازه های از پیش تعیین شده تنظیم کنید. برای دسترسی به آرایه به عنوان منبع، آرایه را در فایل res/values/arrays.xml تعریف کنید.
  • <resources>
      <array name="autosize_text_sizes">
        <item>10sp</item>
        <item>12sp</item>
        <item>20sp</item>
        <item>40sp</item>
        <item>100sp</item>
      </array>
    </resources>
    
    <?xml version="1.0" encoding="utf-8"?>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:autoSizeTextType="uniform"
        android:autoSizePresetSizes="@array/autosize_text_sizes" />
    

اندازه های از پیش تعیین شده را با استفاده از کتابخانه پشتیبانی تنظیم کنید

  • برای استفاده از اندازه های از پیش تعیین شده برای تنظیم اندازه خودکار TextView از طریق کتابخانه پشتیبانی، روش TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] presetSizes, int unit) را فراخوانی کنید. نمونه ای از کلاس TextView ، آرایه ای از اندازه ها و هر واحد بعدی TypedValue را برای اندازه ارائه دهید.
  • برای استفاده از اندازه های از پیش تعیین شده برای تنظیم اندازه خودکار TextView در XML از طریق کتابخانه پشتیبانی، از فضای نام app استفاده کنید و ویژگی های autoSizeTextType و autoSizePresetSizes را در فایل XML طرح بندی تنظیم کنید.
  • <resources>
      <array name="autosize_text_sizes">
        <item>10sp</item>
        <item>12sp</item>
        <item>20sp</item>
        <item>40sp</item>
        <item>100sp</item>
      </array>
    </resources>
    
    <?xml version="1.0" encoding="utf-8"?>
    <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="match_parent">
    
      <TextView
          android:layout_width="match_parent"
          android:layout_height="200dp"
          app:autoSizeTextType="uniform"
          app:autoSizePresetSizes="@array/autosize_text_sizes" />
    </LinearLayout>
    

منابع اضافی

برای اطلاعات بیشتر در مورد اندازه خودکار TextView هنگام کار با محتوای پویا، Android Jetpack: Autosizing TextView را تماشا کنید.