【问题标题】:Binary XML file line #20: Error inflating class TextView in Android 6.0二进制 XML 文件第 20 行:在 Android 6.0 中膨胀类 TextView 时出错
【发布时间】:2020-05-01 16:58:28
【问题描述】:

我为我的应用做了一个布局,它在 Nougat 及更高版本上运行良好,但无论出于何种原因,应用在 Android 6.0 上崩溃并出现以下错误:

05-01 18:26:02.658   805  1839 I ActivityManager: START u0 {cmp=com.vanced.manager/.ui.MainActivity} from uid 10081 on display 0
05-01 18:26:02.691 13123 13123 I art     : Rejecting re-init on previously-failed class java.lang.Class<androidx.core.view.ViewCompat$2>
05-01 18:26:02.692 13123 13123 I art     : Rejecting re-init on previously-failed class java.lang.Class<androidx.core.view.ViewCompat$2>
05-01 18:26:02.699   805  1623 D ConnectivityService: notifyType CAP_CHANGED for NetworkAgentInfo [WIFI () - 100]
05-01 18:26:02.825  9919  9987 I FontsContentProvider: Received query name=Exo&weight=600, URI content://com.google.android.gms.fonts
05-01 18:26:02.825  9919  9987 I FontsContentProvider: Query [name=Exo&weight=600] resolved to {Exo, wdth 100.0, wght 600, ital 0.0, bestEffort false}
05-01 18:26:02.829 13123 13123 D AndroidRuntime: Shutting down VM
05-01 18:26:02.833 13123 13123 E AndroidRuntime: FATAL EXCEPTION: main
05-01 18:26:02.833 13123 13123 E AndroidRuntime: Process: com.vanced.manager, PID: 13123
05-01 18:26:02.833 13123 13123 E AndroidRuntime: Theme: themes:{}
05-01 18:26:02.833 13123 13123 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.vanced.manager/com.vanced.manager.ui.MainActivity}: android.view.InflateException: Binary XML file line #20: Error inflating class TextView
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2450)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2510)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at android.app.ActivityThread.-wrap11(ActivityThread.java)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at android.os.Handler.dispatchMessage(Handler.java:102)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at android.os.Looper.loop(Looper.java:148)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at android.app.ActivityThread.main(ActivityThread.java:5461)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at java.lang.reflect.Method.invoke(Native Method)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
05-01 18:26:02.833 13123 13123 E AndroidRuntime: Caused by: android.view.InflateException: Binary XML file line #20: Error inflating class TextView
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at com.vanced.manager.ui.fragments.HomeFragment.onCreateView(HomeFragment.kt:32)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2629)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2722)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:346)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1188)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:201)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1238)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at android.app.Activity.performStart(Activity.java:6268)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2413)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        ... 9 more
05-01 18:26:02.833 13123 13123 E AndroidRuntime: Caused by: android.view.InflateException: Binary XML file line #20: Error inflating class TextView
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:782)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at android.view.LayoutInflater.rInflate(LayoutInflater.java:835)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at android.view.LayoutInflater.rInflate(LayoutInflater.java:838)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at android.view.LayoutInflater.parseInclude(LayoutInflater.java:971)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at android.view.LayoutInflater.rInflate(LayoutInflater.java:831)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
05-01 18:26:02.833 13123 13123 E AndroidRuntime:        at android.view.LayoutInflater.rInflate(L
05-01 18:26:02.839   805  2693 W ActivityManager:   Force finishing activity com.vanced.manager/.ui.MainActivity

此布局发生错误:

<com.google.android.material.card.MaterialCardView
    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"
    app:cardCornerRadius="@dimen/eightdp"
    app:cardBackgroundColor="?colorSurfaceVariant"
    app:cardElevation="0dp"
    app:cardPreventCornerOverlap="true"
    app:contentPaddingRight="8dp"
    app:contentPaddingLeft="8dp"
    app:contentPaddingTop="5dp"
    app:contentPaddingBottom="5dp">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/vanced_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:drawableStart="@drawable/ic_vanced"
            android:drawablePadding="8dp"
            android:fontFamily="@font/exo_bold"
            android:text="@string/vanced"
            android:textColor="?colorPrimary"
            android:textSize="24sp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

问题出在&lt;TextView/&gt; 标签上。我不确定为什么会在 Marshmallow 而不是 Nougat+ 上发生这种情况(尚未测试棒棒糖,但我认为那里也出现了问题)。谁能解释一下?

更新:这里是HomeFragment.kt

package com.vanced.manager.ui.fragments
import android.content.Context
import android.net.ConnectivityManager
import android.net.Networkimport android.net.NetworkCapabilities
import android.net.NetworkRequestimport android.os.Bundle
import android.view.*import android.view.animation.Animation
import android.view.animation.AnimationUtils
import androidx.viewpager2.widget.ViewPager2
import com.google.android.material.card.MaterialCardView
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
import com.vanced.manager.R
import com.vanced.manager.adapter.SectionPageAdapter
import com.vanced.manager.core.fragments.Home 

class HomeFragment : Home() { 
    private lateinit var sectionPageAdapter: SectionPageAdapter
    private lateinit var viewPager: ViewPager2

    override fun onCreateView( 
        inflater: LayoutInflater, 
        container: ViewGroup?, 
        savedInstanceState: Bundle? ): 
    View? { 
        activity?.title = getString(R.string.title_home) 
        setHasOptionsMenu(true) return  
        inflater.inflate(R.layout.fragment_home, container, false) }

【问题讨论】:

  • Binary XML file line #20 第 20 行哪个?
  • 我包含了发生错误的布局xml代码。
  • 我知道。但是 xml 中的第 20 行是什么?
  • 第 20 行是 TextView 标签开始的地方
  • 注释掉没有解决问题,出现同样的错误

标签: android android-layout textview


【解决方案1】:

05-01 18:26:02.833 13123 13123 E AndroidRuntime: 原因: android.view.InflateException:二进制 XML 文件第 20 行:错误 膨胀类TextView

android:textColor="?colorPrimary" 调用 &lt;attr format="color" name="colorPrimary"/&gt;。如果您使用

,这将是一个好方法
 android:textColor="@color/colorPrimary"  // call hex code from color xml

注意

似乎是您的 android:drawableStart="@drawable/ic_vanced" 引起了问题。请删除并运行。

然后Clean-Rebuild-Run

【讨论】:

  • 谢谢大家,我会试试的
  • @Xinto 删除 app:cardBackgroundColor="?colorSurfaceVariant"
  • 使用srcCompat根本不显示logo,我想我得把logo移出textview
  • 哈哈,是啊...除了奇巧之外,我一直讨厌安卓 N 之前的版本,现在我有更多理由这样做了 xD
  • 不要这么认为,因为其他矢量绘图工作得很好,也检查了 gradle 构建文件,我确实指定了矢量绘图的使用
【解决方案2】:

在 textview 属性中

删除

 android:textColor="?colorPrimary"

添加

android:textColor="@color/colorPrimary"

【讨论】:

  • 好吧,我有 colorPrimary 作为属性,因为我有 2 个主题需要为 colorPrimary 单独颜色,我想根据主题更改该文本,这是唯一的变体吗?
  • 这种情况你应该在清单的活动标签中应用主题
猜你喜欢
  • 2017-05-10
  • 1970-01-01
  • 2020-01-15
  • 2019-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多