The style on this component requires your app theme to be Theme.AppCompat

news/2024/11/24 11:56:57/

通过overlay切换多主题遇到layout里这个组件inflate异常 <com.google.android.material.appbar.AppBarLayout
Caused by: java.lang.IllegalArgumentException: The style on this component requires your app theme to be Theme.AppCompat (or a descendant).
做了几次尝试:
1.将activity主题换为Theme.AppCompat // 失败

2.将application主题也换位Theme.AppCompat // 失败

3.将<com.google.android.material.appbar.AppBarLayout去掉 // OK,但功能需要不能去掉

4.研究源码,找到异常点
com.google.android.material.internal.ThemeEnforcement#checkAppCompatTheme

public static void checkAppCompatTheme(@NonNull Context context) {checkTheme(context, APPCOMPAT_CHECK_ATTRS, APPCOMPAT_THEME_NAME);
}

这个组件会检测主题,通过代码看到
 

private static final int[] APPCOMPAT_CHECK_ATTRS = {R.attr.colorPrimary};

也就是要检测主题colorPrimary属性

private static void checkTheme(@NonNull Context context, @NonNull int[] themeAttributes, String themeName) {if (!isTheme(context, themeAttributes)) {throw new IllegalArgumentException("The style on this component requires your app theme to be "+ themeName+ " (or a descendant).");}
}

这里可以看到异常信息,关键点在于com.google.android.material.internal.ThemeEnforcement#isTheme
 

private static boolean isTheme(@NonNull Context context, @NonNull int[] themeAttributes) {TypedArray a = context.obtainStyledAttributes(themeAttributes);for (int i = 0; i < themeAttributes.length; i++) {if (!a.hasValue(i)) {a.recycle();return false;}}a.recycle();return true;
}

从方法名可以看出是判断是否主题,这里有点不是太明白为啥是这个名字,不过无关紧要,这个方法就是检测传进来的主题属性是否在当前主题里都存在,如果有一个不存在则认为不是主题,从上面可以看出其实就是检测R.attr.colorPrimary属性是否存在,不存在就让你异常,所以解决办法自然有了,那就是在主题里添加这个属性,不过一般加三个,单独加colorPrimary也可以解决问题

<item name="colorAccent">@color/color_cursor</item>
<item name="colorPrimaryDark">@color/primary_dark_material_dark</item>
<item name="colorPrimary">@color/primary_material_dark</item>

http://www.ppmy.cn/news/112967.html

相关文章

win10 使用苹果耳机没有声音解决方案

找到控制面板 点击设置-选项 选中插孔设置-AC97前面板&#xff0c;就会显示麦克风选项了&#xff0c;就有声音了

笔记本连接苹果耳机的方法

1.长按蓝牙耳机的按钮&#xff0c;如下图所示&#xff1a; 2.电脑设置中&#xff0c;快速连接蓝牙耳机

android手机苹果耳机,苹果手机自带耳机相当于什么级别?答案让很多安卓手机“尴尬”!...

原标题&#xff1a;苹果手机自带耳机相当于什么级别&#xff1f;答案让很多安卓手机“尴尬”&#xff01; 苹果手机对于很多用户而言&#xff0c;可以说是有苦说不出&#xff0c;虽然说苹果手机如今的性价比还是非常高的&#xff0c;而且性能依然是处于领先地位&#xff0c;但是…

苹果耳机插入电脑必须按着通话键才有声音---设置左右音频平衡器解决

问题描述 苹果耳机插入电脑&#xff0c;调节系统声音大小&#xff0c;有正常的叮叮声。但是&#xff0c;当我播放视频时&#xff0c;出现人声不清晰&#xff0c;叽叽喳喳的叫&#xff01; 解决方法 网上查了一些方法&#xff0c;说是插短一点&#xff0c;表示插短一点电脑直接识…

iphone计算机的声音怎么办,苹果耳机插电脑上没声音怎么办_苹果耳机插win10电脑没声音如何解决-win7之家...

通常我们将苹果耳机插入电脑的话是可以听歌或者语音说话的&#xff0c;然而近日有不少小伙伴将苹果耳机插入到win10电脑上要使用的时候&#xff0c;却发现没有声音&#xff0c;遇到这样的问题该怎么办呢&#xff0c;可能是设置有问题&#xff0c;本文给大家讲解一下苹果耳机插w…

苹果耳机连接win10自动断开怎么回事?

很多用户都会让苹果耳机连接到电脑后进行使用&#xff0c;但是有时候也会出现自动断连的情况&#xff0c;导致用户体验感不是很好&#xff0c;有什么可以解决win10苹果耳机自动断开连接的问题呢&#xff1f;下面就来看看解决的办法。 具体方法&#xff1a; 1、在连接Wifi的情况…

用什么软件可以检测苹果耳机芯片_苹果耳机AirPods入耳检测的原理!怎么样判断苹果耳机的真假?...

苹果耳机AirPods的入耳检测功能是我们最喜欢的功能&#xff0c;非常的人性化&#xff0c;非常智能。 但是大家有没有思考过它为什么这么好用&#xff1f;为什么这么灵敏&#xff1f; 今天就和大家分享下苹果耳机的入耳检测原理&#xff0c;通过这个你可以判断你的苹果耳机的真假…

苹果无线耳机android能用吗,苹果的蓝牙耳机安卓能用吗

苹果的蓝牙耳机在安卓设备上是可以使用的&#xff0c;无论是安卓手机、平板还是其他智能设备都可以连接airpods耳机&#xff0c;因为它本身是一种蓝牙产品&#xff0c;然后才是苹果耳机&#xff0c;所以本质上和其他蓝牙耳机一样是通用的。不过在安卓和苹果手机上用苹果的蓝牙耳…