java.lang.UnsupportedOperationException: 无法将第5个值转换为颜色:类型=0x5

24

我更新到Android Studio 3 RC1Gradle 4,Android Gradle插件3 RC2)后,我的应用程序崩溃了。

This is the error I am having:
java.lang.RuntimeException: Unable to start activity ComponentInfo{*****}:
android.view.InflateException: Binary XML file line #0: Binary XML file line #0:
Error inflating class com.viewpagerindicator.CirclePageIndicator
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
       at android.app.ActivityThread.-wrap11(Unknown Source:0)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
       at android.os.Handler.dispatchMessage(Handler.java:105)
       at android.os.Looper.loop(Looper.java:164)
       at android.app.ActivityThread.main(ActivityThread.java:6541)
       at java.lang.reflect.Method.invoke(Native Method)
       at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
    Caused by: android.view.InflateException: Binary XML file line #0: Binary XML file line #0: Error inflating class com.viewpagerindicator.CirclePageIndicator
    Caused by: android.view.InflateException: Binary XML file line #0: Error inflating class com.viewpagerindicator.CirclePageIndicator
    Caused by: java.lang.reflect.InvocationTargetException
       at java.lang.reflect.Constructor.newInstance0(Native Method)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:334)
       at android.view.LayoutInflater.createView(LayoutInflater.java:647)
       at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.createCustomViewInternal(CalligraphyLayoutInflater.java:211)
       at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.access$000(CalligraphyLayoutInflater.java:20)
       at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater$PrivateWrapperFactory2.onCreateView(CalligraphyLayoutInflater.java:302)
       at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:186)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:780)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
       at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
       at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
       at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
       at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.inflate(CalligraphyLayoutInflater.java:60)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
       at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287)
       at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
       at com.raimbekov.android.sajde.zikr.ZikrActivity.onCreate(ZikrActivity.java:195)
       at android.app.Activity.performCreate(Activity.java:6975)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
       at android.app.ActivityThread.-wrap11(Unknown Source:0)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
       at android.os.Handler.dispatchMessage(Handler.java:105)
       at android.os.Looper.loop(Looper.java:164)
       at android.app.ActivityThread.main(ActivityThread.java:6541)
       at java.lang.reflect.Method.invoke(Native Method)
       at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
    Caused by: java.lang.UnsupportedOperationException: Can't convert value at index 5 to color: type=0x5
    10-20 10:48:09.562 6156-6156 E/AndroidRuntime:     at android.content.res.TypedArray.getColor(TypedArray.java:473)
        at com.viewpagerindicator.CirclePageIndicator.<init>(CirclePageIndicator.java:96)
        at com.viewpagerindicator.CirclePageIndicator.<init>(CirclePageIndicator.java:72)
            ... 34 more

在更新之前(使用Android Studio 2),我没有遇到这个问题。这也在github上有描述,但是没有答案。


请发布您的布局文件吗? - Neeraj
1
这段代码(CirclePageIndicator)已经有5年没有更新了。在API < 21中,您无法使用attrs来在xml drawable中着色。因此,唯一的方法是使用对颜色资源的引用(@color/YOURS_COLOR)或使用#RGB格式。您可能需要更改::JakeWharton/ViewPagerIndicator库。 - Jon Goodwin
@JonGoodwin 谢谢。我没有使用 attrs。我的颜色在样式中定义为 RGB,它在 API 15 上完美地工作。 - Zhanbolat Raimbekov
@Neeraj,它可以在Android Studio 2上无任何问题地运行。这是来自布局的片段:<android.support.v4.view.ViewPager android:visibility="visible" android:id="@+id/text_pager" android:layout_width="match_parent" android:layout_height="200dp"> </android.support.v4.view.ViewPager> - Zhanbolat Raimbekov
<com.viewpagerindicator.CirclePageIndicator android:layout_centerHorizontal="true" android:layout_alignParentBottom="true" android:layout_marginBottom="8dp" style="@style/CustomCirclePageIndicator" android:id="@+id/text_pager_indicator" android:layout_width="match_parent" android:layout_height="10dp" app:radius="4dp" /> - Zhanbolat Raimbekov
styles.xml:<style name="CustomCirclePageIndicator"> <item name="fillColor">#80333333</item> <item name="unselectedColor">#80a9a9a9</item> <item name="centered">true</item> <item name="strokeColor">@android:color/transparent</item> <item name="pageColor">#80a9a9a9</item> </style> - Zhanbolat Raimbekov
5个回答

28

更改为
compile 'com.github.JakeWharton:ViewPagerIndicator:2.4.1'

它会起作用。该库存在问题。


这实际上是如何解决的?在我的情况下没有起作用,但我想知道它实际上会有什么不同。 - Emre Dirican
这是与 "compile 'com.viewpagerindicator:library:2.4.1@aar'" 库相关的问题...它读取一组颜色,并找不到特定索引...这个 bug 在 "compile 'com.github.JakeWharton:ViewPagerIndicator:2.4.1'" 库中已经修复...你正在使用哪个库? - Abhilash Das
@EmreDirican 在我的情况下也没有起作用。我不得不像这里一样用编程设置替换xml属性:https://dev59.com/s1YN5IYBdhLWcg3w07Bx#47163075 - Lorenzo Polidori

9
我的项目使用android gradle插件3.0和compileSdk 27。我无法通过此设置使用本主题中建议的解决方案(compile 'com.github.JakeWharton:ViewPagerIndicator:2.4.1')。它会抱怨像ViewPager#removeOnPageChangeListener这样的方法不存在,这些方法已经添加到支持库的24版本中。我认为这与该库直接包含android-support-v4.jar有关。我不想查看所有的xml文件并以编程方式设置属性,所以我最终创建了一个分支,使用gradle构建库并将compileSdk/minSdk/support-v4升级为现代版本。您可以在此处找到该项目 https://github.com/splatte/ViewPagerIndicator。要在您的项目中使用它,请按以下方式从jitpack获取:
allprojects {
    repositories {
      maven { url "https://jitpack.io" }
    }
}

然后:

dependencies {
    implementation 'com.github.splatte:ViewPagerIndicator:3.0.0'
}

在 ViewPagerIndicator 的 4,300 个分支中,可能还有其他项目也实现了这个功能,但我不知道如何找到它。


6

compile 'com.github.JakeWharton:ViewPagerIndicator:2.4.1'使用jitpack.io在使用android gradle插件3.0的情况下无法正常工作。

相反,我必须以编程方式设置之前在xml布局中使用(或)属性设置的所有视图属性。

示例

<com.viewpagerindicator.CirclePageIndicator
    cpi:fillColor="@color/azure"
    cpi:pageColor="@color/white"
    cpi:radius="4dp"
    cpi:snap="true"
    cpi:strokeWidth="0dp" />

我移除了所有的属性,并通过编程方式设置它们:
circlePageIndicator.setFillColor(ContextCompat.getColor(getContext(), R.color.azure));
circlePageIndicator.setPageColor(ContextCompat.getColor(getContext(), R.color.white));
circlePageIndicator.setRadius((int) (4 * Resources.getSystem().getDisplayMetrics().density));
circlePageIndicator.setSnap(true);
circlePageIndicator.setStrokeWidth(0);

5

我发现使用 jitpack.io 是最简单的方法:

allprojects {
    repositories {
      maven { url "https://jitpack.io" }
    }
}

然后:

dependencies {
  implementation ('com.github.JakeWharton:ViewPagerIndicator:2.4.1'){
    exclude module: 'support-v4'
  }
}

需要注意的是,同时存在两个版本的support-v4库会导致其故障,直到我排除了其中一个版本。


0

嗯,这个库已经很久没有更新了,所以在更新的SDK中会出现很多问题,因此您需要使用下面的库来替换它。

///// 旧库

implementation 'com.github.JakeWharton:ViewPagerIndicator:2.4.1'

// 用以下内容替换它 // 用于ViewPager指示器

implementation 'com.github.splatte:ViewPagerIndicator:3.0.0'

如果它能工作,否则请不要忘记添加

   maven { url "https://jitpack.io" }

// 将其放置在 setting.gradle 文件中


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接