【问题标题】:Android TextInputLayout Crashed app when I had added 'style'当我添加“样式”时,Android TextInputLayout 应用程序崩溃
【发布时间】:2021-10-30 12:50:46
【问题描述】:

我在 Android 的材料组件中遇到了 TextInputLayout 的问题。当我将 style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense" 添加到我的 TextInputLayout 时,应用程序崩溃了。所有代码 .xml 就像片段一样。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".CreatorFragment"
    android:background="@color/cardview_dark_background">

    <LinearLayout
        android:orientation="vertical"
        android:padding="20dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ImageView
            android:id="@+id/imageView"
            android:layout_width="match_parent"
            android:layout_height="164dp"
            android:foregroundGravity="center_vertical|center|center_horizontal"
            android:src="@drawable/ic_photo"
            />

        <com.google.android.material.textfield.TextInputLayout

            android:id="@+id/outlinedTextField"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            tools:layout_editor_absoluteX="1dp"
            tools:layout_editor_absoluteY="244dp"
            android:hint="Title"
            app:counterEnabled="true"
            app:counterMaxLength="18"
            app:counterOverflowTextColor="?attr/colorPrimary"
            android:textColorHint = "?attr/colorPrimary"
            app:hintTextColor = "?attr/colorPrimary"
            app:prefixTextColor = "?attr/colorPrimary"
            app:boxStrokeColor = "?attr/colorPrimary"
            style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense"
            >


            <com.google.android.material.textfield.TextInputEditText

                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                 />
        </com.google.android.material.textfield.TextInputLayout>


    </LinearLayout>

</FrameLayout>

我在清单中有:

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:requestLegacyExternalStorage="true"
        android:theme="@style/Theme.MaterialComponents.Light.DarkActionBar">

来自 logcat 的错误代码是:

2021-10-30 14:42:48.810 6850-6850/com.example.diary E/libc: Access denied finding property "ro.vendor.df.effect.conflict"
      0.2% 1421/msm_irqbalance: 0% user + 0.2% kernel
      0.2% 2678/com.android.phone: 0% user + 0.1% kernel / faults: 2 minor
      0.1% 692/zygote64: 0% user + 0.1% kernel / faults: 194 minor
      0.1% 3419/irq/81-90b6300.: 0% user + 0.1% kernel
      0% 10914/com.miui.securitycenter.remote: 0% user + 0% kernel / faults: 749 minor
      0.1% 1/init: 0% user + 0% kernel
      0.1% 27/ksoftirqd/2: 0% user + 0.1% kernel
      0% 793/android.hardware.health@2.0-service: 0% user + 0% kernel
      0.1% 22074/logcat: 0.1% user + 0% kernel
      0.1% 25230/kworker/2:0: 0% user + 0.1% kernel
      0% 8/ksoftirqd/0: 0% user + 0% kernel
      0% 12/rcuop/0: 0% user + 0% kernel
      0% 538/ueventd: 0% user + 0% kernel
      0% 813/vendor.qti.hardware.perf@2.0-service: 0% user + 0% kernel
      0% 867/mi_thermald: 0% user + 0% kernel
      0% 1220/statsd: 0% user + 0% kernel
      0% 2179/hvdcp_opti: 0% user + 0% kernel
      0% 3369/kworker/1:0: 0% user + 0% kernel
      0% 5029/transport: 0% user + 0% kernel
      0% 21135/kworker/u17:0: 0% user + 0% kernel
      0% 27171/com.miui.notification:remote: 0% user + 0% kernel
      0% 30321/com.google.android.youtube: 0% user + 0% kernel / faults: 6 minor
      0% 9/rcu_preempt: 0% user + 0% kernel
      0% 10/rcu_sched: 0% user + 0% kernel
      0% 13/rcuos/0: 0% user + 0% kernel
      0% 19/ksoftirqd/1: 0% user + 0% kernel
      0% 22/rcuop/1: 0% user + 0% kernel
      0% 30/rcuop/2: 0% user + 0% kernel
      0% 38/rcuop/3: 0% user + 0% kernel
      0% 560/servicemanager: 0% user + 0% kernel
      0% 691/netd: 0% user + 0% kernel / faults: 18 minor
      0% 759/qrtr_rx: 0% user + 0% kernel
      0% 803/android.hardware.wifi@1.0-service: 0% user + 0% kernel
      0% 1200/cameraserver: 0% user + 0% kernel
      0% 1440/qcrild: 0% user + 0% kernel / faults: 6 minor
      0% 2382/cds_ol_rx_threa: 0% user + 0% kernel
      0% 3252/kworker/3:1: 0% user + 0% kernel
      0% 3264/kworker/2:2: 0% user + 0% kernel
      0% 3331/charge_logger: 0% user + 0% kernel
      0% 16507/kworker/u17:1: 0% user + 0% kernel
      0% 17866/com.mi.android.globallauncher: 0% user + 0% kernel / faults: 3 minor
      0% 21372/kworker/0:0: 0% user + 0% kernel
      0% 30216/kworker/2:1: 0% user + 0% kernel
     +0% 5515/com.android.se: 0% user + 0% kernel
    3.3% TOTAL: 1.5% user + 1.3% kernel + 0% iowait + 0.3% irq + 0.1% softirq
    CPU usage from 1438307732ms to 1438307732ms ago (1970-01-01 01:00:00.000 to 1970-01-01 01:00:00.000) with 0% awake:
    0% TOTAL: 0% user + 0% kernel
2021-10-30 14:42:48.714 6850-6850/? E/m.example.diar: Unknown bits set in runtime_flags: 0x8000
2021-10-30 14:42:48.714 6850-6850/? E/m.example.diar: Unknown bits set in runtime_flags: 0x8000
2021-10-30 14:42:48.714 6850-6850/? E/m.example.diar: Unknown bits set in runtime_flags: 0x8000
2021-10-30 14:42:52.914 6850-6850/com.example.diary E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.diary, PID: 6850
    android.view.InflateException: Binary XML file line #40 in com.example.diary:layout/fragment_creator: Binary XML file line #40 in com.example.diary:layout/fragment_creator: Error inflating class com.google.android.material.textfield.TextInputLayout
    Caused by: android.view.InflateException: Binary XML file line #40 in com.example.diary:layout/fragment_creator: Error inflating class com.google.android.material.textfield.TextInputLayout
    Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
        at android.view.LayoutInflater.createView(LayoutInflater.java:858)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1010)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:965)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:1127)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1088)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:1130)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1088)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:686)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:538)
        at com.example.diary.CreatorFragment.onCreateView(CreatorFragment.kt:37)
        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2963)
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:518)
        at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282)
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189)
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2106)
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002)
        at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:224)
        at android.app.ActivityThread.main(ActivityThread.java:7565)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
     Caused by: java.lang.IllegalArgumentException: The style on this component requires your app theme to be Theme.MaterialComponents (or a descendant).
        at com.google.android.material.internal.ThemeEnforcement.checkTheme(ThemeEnforcement.java:243)
        at com.google.android.material.internal.ThemeEnforcement.checkMaterialTheme(ThemeEnforcement.java:217)
        at com.google.android.material.internal.ThemeEnforcement.checkCompatibleTheme(ThemeEnforcement.java:145)
        at com.google.android.material.internal.ThemeEnforcement.obtainTintedStyledAttributes(ThemeEnforcement.java:115)
        at com.google.android.material.textfield.TextInputLayout.<init>(TextInputLayout.java:469)
        at com.google.android.material.textfield.TextInputLayout.<init>(TextInputLayout.java:428)
        at java.lang.reflect.Constructor.newInstance0(Native Method) 
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343) 
        at android.view.LayoutInflater.createView(LayoutInflater.java:858) 
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1010) 
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:965) 
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:1127) 
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1088) 
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:1130) 
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1088) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:686) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:538) 
        at com.example.diary.CreatorFragment.onCreateView(CreatorFragment.kt:37) 
        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2963) 
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:518) 
        at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282) 
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189) 
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2106) 
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002) 
        at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524) 
        at android.os.Handler.handleCallback(Handler.java:883) 
        at android.os.Handler.dispatchMessage(Handler.java:100) 
        at android.os.Looper.loop(Looper.java:224) 
        at android.app.ActivityThread.main(ActivityThread.java:7565) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950) 

第 40 行位于 TextInputLayout 中的“样式”之后。 我该如何解决?

【问题讨论】:

    标签: android android-studio material-components-android android-textinputlayout


    【解决方案1】:

    Stacktrace 异常原因从外部开始,并按其方式进行 - 您首先看到的是导致崩溃的异常,但如果您仔细阅读,您会看到 导致该异常的原因,然后是什么导致那个等等,直到你找到问题的根源。

    如果您遍历每个部分(以 Caused by 开头),您最终会到达此部分(最后一部分,即问题开始的地方):

    Caused by: java.lang.IllegalArgumentException: The style on this component requires your app theme to be Theme.MaterialComponents (or a descendant).
    

    这可能是足够的信息! ;)

    【讨论】:

    • 是的,我发现了一个问题。我尝试在新的活动(不是片段)上这样做,它没有崩溃。我不知道。在 Fragment 中,这种“样式”不起作用?
    • 好的,今天一切正常。 Theme.MaterialComponents.Light.DarkActionBar 就足够了。我不知道怎么做。 Android Studio 可能需要重启吗?但是感谢您的帮助:D
    • 每当您做出似乎不起作用的更改时,总是值得在Build 菜单中尝试Clean,尤其是在XML 中的某些内容或进行代码生成的组件时。重新启动也应该这样做,但是速度要慢得多!很高兴你让它工作了!
    【解决方案2】:

    将您的应用主题更改为 Theme.MaterialComponents,您可能会没事的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-20
      • 2017-12-22
      • 2021-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多