我正在从一个自定义 MediaRouteButton 移动到操作栏内的一个,但它没有正确显示。定制时的按钮是白色的,这正是我想要的。但是,即使操作栏是“Holo.Light”样式,按钮在操作栏上仍然是白色的(几乎看不到)。该按钮应该是深色的。
按钮创建为 XML 菜单项:
<item
android:id="@+id/menu_item_media_route"
android:title="@string/menu_item_media_route"
android:actionViewClass="android.support.v7.app.MediaRouteButton"
android:actionProviderClass="android.support.v7.app.MediaRouteActionProvider"
android:showAsAction="always" />
我的应用是“@style/AppTheme”风格:
<style name="AppTheme" parent="android:Theme.Holo.Light">
</style>
主题“@style/FullscreenActionbarTheme”我的 Activity :
<style name="FullscreenActionbarTheme" parent="android:Theme.Holo.Light">
<item name="android:windowFullscreen">true</item>
<item name="android:windowActionBarOverlay">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowBackground">@null</item>
<item name="android:actionBarStyle">@style/FullscreenActionbar</item>
</style>
<style name="FullscreenActionbar" parent="@android:style/Widget.Holo.Light.ActionBar.Solid">
</style>
我没有自定义“ic_media_route_(on|off).png”可绘制对象——我以前有但删除了它们。
我试过改变各种样式,虽然操作栏会变暗,但转换按钮始终是白色的。 (因为它应该在深色操作栏上而不是浅色操作栏上。)
按钮功能齐全,只是颜色不对。按下按钮时出现的“选择器”对话框样式为“Holo.Light”。
那么,为什么我的转换按钮在“Holo.Light”主题上显示为白色,就好像它是“Holo”(深色)主题一样?
最佳答案
取自:Link
Caution: When implementing an activity that provides a media router interface you must extend either ActionBarActivity or FragmentActivity from the Android Support Library, even if your android:minSdkVersion is API 11 or higher.
ActionBarActivity
已被 AppCompatActivity
取代,因此您应该改用它。
Support-V7 MediaRouteButton
依赖于此。查看 super
调用:
public MediaRouteButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(MediaRouterThemeHelper.createThemedContext(context), attrs, defStyleAttr);
....
....
}
MediaRouterThemeHelper.createThemedContext(Context)
:
public static Context createThemedContext(Context context) {
boolean isLightTheme = isLightTheme(context);
return new ContextThemeWrapper(context, isLightTheme ?
R.style.Theme_MediaRouter_Light : R.style.Theme_MediaRouter);
}
isLightTheme
通过解析 R.attr.isLightTheme
设置 <<== 这是一个支持库属性。当您的父主题由框架提供时,它不会出现,例如 android:Theme.Holo.Light
。
private static boolean isLightTheme(Context context) {
TypedValue value = new TypedValue();
return context.getTheme().resolveAttribute(R.attr.isLightTheme, value, true)
&& value.data != 0;
}
因此,isLightTheme
为 false
并且您将获得 MediaRouteButton
的深色主题版本 ==> ... 始终为白色。
请注意,警告 语句暗示您的父主题必须是 AppCompat 主题 - AppCompatActivity
(或 ActionBarActivity
)无法使用android:Theme.*
.
编辑:
这里发生了很多讨论:Link
人们可以通过聊天记录来阅读尝试过的方法。最后,媒体路由器支持库似乎需要一些工作才能投入生产。在这里阅读更多:MediaRouteActionProvider connection dialog theme .
关于android - 为什么 Cast MediaRouteButton 即使在 Holo.Light Action-Bar 上也总是白色的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28385494/