Ошибка надувания класса TextView с помощью AutoSizing - PullRequest
0 голосов
/ 29 января 2019

Я начал использовать Autosizing TextView , и в большинстве случаев он работает довольно хорошо, исключение составляет следующее.

У меня есть просмотрщик и в макете элемента у меня есть следующий TextView:

<TextView
    android:id="@+id/title_tv"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_marginStart="8dp"
    android:layout_marginEnd="8dp"
    android:ellipsize="end"
    android:gravity="top|center_horizontal"
    android:maxLines="2"
    android:textColor="@color/e_white"
    app:autoSizeMaxTextSize="14sp"
    app:autoSizeTextType="uniform"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHeight_min="25dp"
    app:layout_constraintStart_toStartOf="parent"
    tools:text="@tools:sample/cities" />

Это работает хорошо, но если я уменьшу значение app:autoSizeMaxTextSize до 12sp, появится следующее исключение:

android.view.InflateException: Binary XML file line #30: Binary XML file line #30: Error inflating class TextView
        at android.view.LayoutInflater.inflate(LayoutInflater.java:543)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:427)
        at my.package.MyAdapter.onCreateViewHolder(MyAdapter.java:41)
        at my.package.MyAdapter.onCreateViewHolder(MyAdapter.java:22)
        at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6794)
        at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5975)
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5858)
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5854)
        at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2230)
        at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1557)
        at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517)
        at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:612)
        at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3924)
        at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3641)
        at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:4194)
        at android.view.View.layout(View.java:16672)
        at android.view.ViewGroup.layout(ViewGroup.java:5440)
        at android.support.constraint.ConstraintLayout.onLayout(ConstraintLayout.java:1915)
        at android.view.View.layout(View.java:16672)
        at android.view.ViewGroup.layout(ViewGroup.java:5440)
        at android.support.constraint.ConstraintLayout.onLayout(ConstraintLayout.java:1915)
        at android.view.View.layout(View.java:16672)
        at android.view.ViewGroup.layout(ViewGroup.java:5440)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
        at android.view.View.layout(View.java:16672)
        at android.view.ViewGroup.layout(ViewGroup.java:5440)
        at android.support.constraint.ConstraintLayout.onLayout(ConstraintLayout.java:1915)
        at android.view.View.layout(View.java:16672)
        at android.view.ViewGroup.layout(ViewGroup.java:5440)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
        at android.view.View.layout(View.java:16672)
        at android.view.ViewGroup.layout(ViewGroup.java:5440)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
        at android.view.View.layout(View.java:16672)
        at android.view.ViewGroup.layout(ViewGroup.java:5440)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
        at android.view.View.layout(View.java:16672)
        at android.view.ViewGroup.layout(ViewGroup.java:5440)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
        at android.view.View.layout(View.java:16672)
        at android.view.ViewGroup.layout(ViewGroup.java:5440)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
        at com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2678)
        at android.view.View.layout(View.java:16672)
        at android.view.ViewGroup.layout(ViewGroup.java:5440)
        at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2207)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1963)

Может кто-нибудь объяснить мне это поведение?

1 Ответ

0 голосов
/ 29 января 2019

Это происходит при указании app:autoSizeMaxTextSize=12sp, поскольку максимальное значение становится равным минимальному размеру текста, который он может иметь с autoSize (который также является значением по умолчанию 12sp).

autoSize не позволяет максимальному значению быть равным или меньшим минимального значения (в любом случае, это не автоматическое определение размера).

Решение:

Чтобы установить максимальное значение 12sp, вам нужно уменьшить минимальный размер текста, который он может иметь, например, с помощью app:autoSizeMinTextSize=6sp.

...