Android TextInputLayout Разбил приложение, когда я добавил «стиль»

#android #android-studio #material-components-android #android-textinputlayout

Вопрос:

У меня проблема с TextInputLayout из компонентов материалов для Android. Когда я добавляю style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense" в свой TextInputLayout, приложение выходит из строя. Весь код .xml похож на фрагмент.

 lt;?xml version="1.0" encoding="utf-8"?gt; lt;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"gt;   lt;LinearLayout  android:orientation="vertical"  android:padding="20dp"  android:layout_width="match_parent"  android:layout_height="match_parent"gt;   lt;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"  /gt;   lt;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"  gt;    lt;com.google.android.material.textfield.TextInputEditText   android:layout_width="match_parent"  android:layout_height="wrap_content"  /gt;  lt;/com.google.android.material.textfield.TextInputLayoutgt;    lt;/LinearLayoutgt;  lt;/FrameLayoutgt;  

У меня в манифесте:

 lt;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"gt;  

И код ошибки от 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.lt;initgt;(TextInputLayout.java:469)  at com.google.android.material.textfield.TextInputLayout.lt;initgt;(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. Как я могу это исправить?

Ответ №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).  

Наверное, этого достаточно! 😉

Комментарии:

1. Да, я нахожу проблему. Я пытаюсь сделать это в новом действии (не фрагменте), и оно не разбивается. Я не знаю. Во Фрагменте этот «стиль» не работает?

2. Хорошо, сегодня все работает. Хватит с темы. Материальные компоненты. Свет. Панель темных действий. Я не знаю, как это сделать. Может ли потребоваться перезагрузка Android Studio? Но спасибо за помощь 😀

3. Это всегда стоит попробовать Clean в Build меню всякий раз, когда вы вносите изменения, которые, похоже, не работают, особенно если это что-то в XML или компонент, который выполняет генерацию кода. Перезапуск тоже должен это сделать, но он намного медленнее! Рад, что у тебя все получилось!

Ответ №2:

Измените тему своего приложения на тему.Материальные компоненты, и, вероятно, с вами все будет в порядке