当前位置: 首页 > 知识库问答 >
问题:

为什么即使在Holo上,演员MediaRouteButton也总是白色的。轻动作条?

程智明
2023-03-14

我正在从一个自定义的MediaRouteButton移动到操作栏中的一个按钮,但它不能正确显示。自定义时的按钮是白色的,这是我想要的。然而,即使操作栏是“全息光”样式,按钮在操作栏上仍然是白色的(几乎看不见)。按钮应该是黑色的。

按钮创建为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/FullScreActionbarTheme"的活动:

<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”(黑暗)主题一样?

共有2个答案

步建茗
2023-03-14

如果所有其他方法都失败,您可以在onCreate()中以编程方式更改颜色:

   ImageButton button = ((ImageButton) toolbar.getChildAt( ... )); // The view index of the button
    button.setColorFilter(Color.BLACK, PorterDuff.Mode.MULTIPLY);
云开诚
2023-03-14

摘自:链接

警告:当实施提供媒体路由器接口的活动时,即使您的Android:MinSDK版本为API 11或更高版本,您也必须从Android支持库扩展ActionBarActivity或FragmentActivity。

ActionBarActivity已被AppCompatActivity取代,因此您应该改用它。

Support-V7媒体路由按钮取决于此。查看super调用:

public MediaRouteButton(Context context, AttributeSet attrs, int defStyleAttr) {
    super(MediaRouterThemeHelper.createThemedContext(context), attrs, defStyleAttr);
    ....
    ....
}

<代码>MediaRouterThemeHelper。CreateMedContext(上下文)

public static Context createThemedContext(Context context) {
    boolean isLightTheme = isLightTheme(context);
    return new ContextThemeWrapper(context, isLightTheme ?
            R.style.Theme_MediaRouter_Light : R.style.Theme_MediaRouter);
}

isLightTheming是通过解析R.attr.isLightTheming来设置的。

private static boolean isLightTheme(Context context) {
    TypedValue value = new TypedValue();
    return context.getTheme().resolveAttribute(R.attr.isLightTheme, value, true)
            && value.data != 0;
}

因此,isLightTheme是false

请注意,Caution语句暗示您的父主题必须是AppCompat主题-AppCompatActive(或ActionBaractive)不能与android: Theme.*一起使用。

编辑:

这里发生了很多讨论:链接

人们可以浏览聊天日志来阅读尝试的方法。最后,媒体路由器支持库似乎需要一些工作才能做好生产准备。在此处阅读更多:MediaRouteActionProvider连接对话框主题。

 类似资料: