每次我都会收到“您需要将 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'
layout:
<?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>
theme:
<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>
我正在膨胀里面的布局service:
tooltipContainer = (CoordinatorLayout) LayoutInflater.from(this).inflate(R.layout.tooltip_layout, null);
创建一个ContextThemeWrapper
包裹Service
's Context
与您的自定义主题,并获得LayoutInflater
从那。
ContextThemeWrapper ctx = new ContextThemeWrapper(this, R.style.TranslucentAppTheme);
tooltipContainer = (CoordinatorLayout) LayoutInflater.from(ctx)
.inflate(R.layout.tooltip_layout, null);
ContextThemeWrapper http://developer.android.com/reference/android/view/ContextThemeWrapper.html修改给定的Context
的主题与您在构造函数中指定的主题。自从一个Service
并没有真正的主题,它只是将你的主题附加到Service
's Context
,那么LayoutInflater
有适当的主题来扩充图书馆View
s.
或者,如果在布局 XML 中处理它更合适或更少涉及,您可以设置一个android:theme
根上的属性<ViewGroup>
,这只会导致LayoutInflater
做Context
内部包裹。例如:
<android.support.design.widget.CoordinatorLayout
...
android:theme="@style/TranslucentAppTheme">
但是,这仅适用于该平台LayoutInflater
从 Lollipop(API 级别 21)开始。 support/androidx 库能够在旧版本上处理该属性,但它的设置方式旨在用于Activity
仅类,在这种情况下,自己进行包装可能会更简单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)