“您需要在设计库中使用Theme.AppCompat主题(或后代)"错误 [英] "You need to use a Theme.AppCompat theme (or descendant) with the design library" error
问题描述
即使我显然使用的是AppCompat主题(后代),每次也会出现您需要在设计库中使用Theme.AppCompat主题(或后代)"错误.
I'm getting "You need to use a Theme.AppCompat theme (or descendant) with the design library" error every time even if I'm obviously using an AppCompat Theme (a descendant one).
依赖项:
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>
清单:
<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
,用您的自定义主题包装Service
的Context
,并从中获取LayoutInflater
.
Create a ContextThemeWrapper
to wrap the Service
's Context
with your custom theme, and get the LayoutInflater
from that.
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
s膨胀.
The ContextThemeWrapper
modifies the given Context
's theme with the one you specify in the constructor. Since a Service
doesn't really have a theme, it just tacks yours onto the Service
's Context
, then the LayoutInflater
has the appropriate theme to inflate the design View
s.
这篇关于“您需要在设计库中使用Theme.AppCompat主题(或后代)"错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!