DeastinY
DeastinY

Reputation: 361

TextView autoSizeTextType not working in Compat

I tried using autoSizeTextType. My minSdk is 24, all the tools are 26 and compat ist 26-beta2 as well.

Making them adjustable was tried through code:

dialogWeight.touchables.filterIsInstance<Button>().forEach {
TextViewCompat.setAutoSizeTextTypeWithDefaults(it, 
TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM) }

And xml:

<android.support.v7.widget.AppCompatTextView
android:layout_height="match_parent"
android:text="7"
android:autoSizeTextType="uniform"/>

Any ideas ? I'm starting to believe that it's currently bugged

Upvotes: 13

Views: 14491

Answers (5)

straya
straya

Reputation: 5059

These days with androidx you want to use implementation "androidx.legacy:legacy-support-v4:1.0.0" along with TewxtView and e.g. android:autoSizeTextType="uniform"

Upvotes: 0

jpage4500
jpage4500

Reputation: 988

I wanted to update this thread since android.support.v7 has been migrated to androidX

I was having problems getting the text to display at all and what fixed it for me was this note about singleLine in one of the comments:

Side note, make sure not to set android:singleLine="true", then the auto-shrink will not work.

    <androidx.appcompat.widget.AppCompatTextView
        android:id="@+id/tempText"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:maxLines="1"
        android:textColor="@color/white"
        android:textSize="60dp"
        app:autoSizeMinTextSize="20dp"
        app:autoSizeTextType="uniform"
        tools:text="99&#xb0;" />

Upvotes: 4

JHowzer
JHowzer

Reputation: 4264

The key thing to understand is to use app:autoSizeTextType, as opposed to android:autoSizeTextType

Per the documentation:

To define the default setting in XML through the support library, use the app namespace and set the autoSizeTextType attribute to none or 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>

Upvotes: 12

Nick Pampoukidis
Nick Pampoukidis

Reputation: 742

I solved it programmatically.

TextView number1 = findViewById(R.id.number_one);
TextViewCompat.setAutoSizeTextTypeWithDefaults(number1, TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM);

and the XML:

  <TextView
        android:id="@+id/number_one"
        android:autoSizeTextType="uniform"
        android:gravity="center"
        android:text="1"  />

Upvotes: 9

DeastinY
DeastinY

Reputation: 361

Okay, so the combination of settings that worked :

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<android.support.v7.widget.AppCompatTextView
android:text="7"
app:autoSizeTextType="uniform"/>

You also need the appcompat-v7 library as a dependency in your module build.gradle file.

dependencies {
    implementation 'com.android.support:appcompat-v7:27.1.1'
}

Upvotes: 19

Related Questions