#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:
Измените тему своего приложения на тему.Материальные компоненты, и, вероятно, с вами все будет в порядке