android.view.InflateException:二进制 XML 文件行 #39:膨胀 class ProgressWidget 时出错

android.view.InflateException: Binary XML file line #39: Error inflating class ProgressWidget

public final class ProgressWidget extends LinearLayout {

    <Default Constructors implemented> {
        setOrientation(LinearLayout.VERTICAL);
        inflate(context, R.layout.horizontal_progress, this);
    }

    @Override
    protected void onFinishInflate() {
        //Continue with rest of the logic.
    }
}

R.layout.horizontal_progress 有 35 行。

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">

<TextView
    android:id="@+id/progressTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/rounded_white_background"
    android:gravity="center"
    android:textColor="@color/light_black"
    android:textSize="12sp"
    android:fontFamily="roboto-regular"
    android:paddingTop="1dp"
    android:paddingBottom="1dp"
    android:paddingLeft="2dp"
    android:paddingRight="2dp" />

<SeekBar
    android:id="@+id/progress"
    android:layout_width="match_parent"
    android:layout_height="@dimen/horizontal_progress_height"
    android:indeterminate="false"
    android:progressDrawable="@drawable/horizontal_progress"
    android:gravity="center"
    android:thumb="@null"
    android:progress="0"
    android:secondaryProgress="0"
    android:max="100"
    android:minHeight="@dimen/horizontal_progress_height"
    android:paddingTop="1dp"
    android:paddingBottom="1dp"
    android:paddingLeft="2dp"
    android:paddingRight="2dp" />

</merge>

R.drawable.horizontal_progress 有 36 行。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
<item android:id="@android:id/background">
    <shape android:shape="rectangle" >
        <corners android:radius="@dimen/horizontal_progress_radius" />
        <gradient
            android:startColor="@color/horizontal_progress_background"
            android:endColor="@color/horizontal_progress_background"
            android:angle="270"/>
    </shape>
</item>
<item android:id="@android:id/secondaryProgress">
    <clip>
        <shape android:shape="rectangle" >
            <corners android:radius="@dimen/horizontal_progress_radius" />
            <gradient
                android:startColor="@android:color/white"
                android:endColor="@android:color/white"
                android:angle="270"/>
        </shape>
    </clip>
</item>
<item android:id="@android:id/progress">
    <clip>
        <shape android:shape="rectangle" >
            <corners android:radius="@dimen/horizontal_progress_radius" />
            <gradient
                android:startColor="?android:attr/colorAccent"
                android:endColor="?android:attr/colorAccent"
                android:angle="270"
                tools:ignore="NewApi"/>
        </shape>
    </clip>
</item>
</layer-list>

堆栈跟踪的最后一段。

原因:android.view.InflateException:二进制 XML 文件行 #39:膨胀 class ProgressWidget 时出错 在 android.view.LayoutInflater.createView(LayoutInflater.java:620) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:758) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:462) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:397) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:353) 在 android.view.View.inflate(View.java:1746

在 Phone 设备上一切正常 - Samsung Galaxy S5 SM-G900A,Android 版本 5.0。总是在 Asus Nexus 7 上使用上述堆栈跟踪崩溃,Android 4.4.3.

此 ProgressWidget 是 Android 库模块的自定义可重用组件,将与项目模块一起使用。预计主要项目模块将满足 minSDKVersion 16 一直到 TargetSDKVersion 24 的要求。

任何有关可能导致仅在平板设备上崩溃的原因的指示将不胜感激。

尝试更改最后一个渐变(具有 tools:ignore="NewApi" 线的那个)中的颜色。这两种颜色在 SDK<21 中没有定义。 如果这不能解决问题,请 post 更多堆栈跟踪。

我根据另一个类似问题设法解决了这个问题。