android - "You need to use a Theme.AppCompat theme (or descendant) with the design library"错误

标签 android layout styles android-appcompat

我每次都收到“您需要将 Theme.AppCompat 主题(或后代)与设计库一起使用”错误,即使我显然使用的是 AppCompat 主题(后代主题)也是如此。

依赖项:

compile 'com.android.support:appcompat-v7:23.3.0'
compile 'com.android.support:design:23.3.0'
compile 'com.android.support:support-v4:23.3.0'

布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/tooltip_container"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="gone">

    <ImageView
        android:id="@+id/tooltip_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"/>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab_delete_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_anchor="@id/tooltip_image"
        app:layout_anchorGravity="top|end"/>

</android.support.design.widget.CoordinatorLayout>

主题:

<style name="TranslucentAppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:backgroundDimEnabled">false</item>
</style>

list :

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/TranslucentAppTheme">
        <activity android:name=".MainActivity">
            (...)
</activity>

我在服务中膨胀布局:

tooltipContainer = (CoordinatorLayout) LayoutInflater.from(this).inflate(R.layout.tooltip_layout, null);

最佳答案

创建一个 ContextThemeWrapper包装 ServiceContext使用您的自定义主题,并获得 LayoutInflater从那开始。

ContextThemeWrapper ctx = new ContextThemeWrapper(this, R.style.TranslucentAppTheme);
tooltipContainer = (CoordinatorLayout) LayoutInflater.from(ctx)
    .inflate(R.layout.tooltip_layout, null);

ContextThemeWrapper 修改给定的 Context的主题与您在构造函数中指定的主题。自Service没有真正的主题,它只是将你的主题添加到 Service 上的 Context , 然后是 LayoutInflater有合适的主题来扩充图书馆View


或者,如果在布局 XML 中处理它更合适或更少涉及,您可以设置 android:theme根上的属性 <ViewGroup> ,这只会导致 LayoutInflaterContext内部包装。例如:

<android.support.design.widget.CoordinatorLayout
    ...
    android:theme="@style/TranslucentAppTheme">

但是,这仅适用于平台 LayoutInflater从 Lollipop(API 级别 21)开始。 support/androidx 库能够在旧版本上处理该属性,但它的设置方式旨在用于 Activity仅类,在这种情况下自行包装可能更简单。

关于android - "You need to use a Theme.AppCompat theme (or descendant) with the design library"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36924481/

相关文章:

javascript - 2 个 highcharts 源之间的 Highcharts 样式行为差异

android - 单独更改 ActionBarSherlock 的背景。不是标签

java - JPanel GridLayout 使所有按钮位于同一位置

css - 在R Shiny中的fluidRow中设置不等列长度文本的格式

html - 显示 block 和内联 block 之间的间距差异

react-native - 处理 React Native 中的字体大小单位(Dp、Sp、px ..)

android - 仅发现供应商特定的蓝牙设备

java - 如何通过键列表对 Hashmap 中的列表元素进行分组

java - 在 Android 应用程序中使用代理服务器

html - 有没有办法设置选择元素的箭头样式?