gpt4 book ai didi

android - 样式化 ChromeCast MediaRoute 按钮

转载 作者:太空狗 更新时间:2023-10-29 14:13:36 24 4
gpt4 key购买 nike

我似乎无法让 MediaRoute 按钮在我的实体 ActionBar 中显示为“白色”。

我的问题是:我们如何在不更改可绘制对象名称的情况下将 MediaRoute 按钮设置为浅色或深色?

在这里查看类似的问题:How do I change the style of the MediaRouteButton in the ActionBar?公认的解决方案只是使用您自己的一组 MediaRoute 可绘制对象,并交换名称 light<>dark。

对于我的应用程序,我有 3 种不同的样式:light-ActionBar、dark-ActionBar 和 light solid-ActionBar。我不能简单地交换可绘制名称,因为我需要深色和浅色才能正确显示前两个主题。为了正确显示实心操作栏内容,我正在做这样的事情:(以下示例在这里:http://www.jayway.com/2014/06/02/android-theming-the-actionbar/)

//Parent Light.DarkActionBar should give white ActionBar icons
<style name="AppTheme.Solid.Light" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:actionBarStyle">@style/Widget.Solid.ActionBar</item>
<item name="android:actionBarWidgetTheme">@style/ActionBarWidget</item>
.
.

//Make the ActionBar solid, but need to use 'inverse' to keep the icons/text white
<style name="Widget.Solid.ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">
.
.

//**** THE ISSUE IS CAUSED BY USING THE FOLLOWING
//Make the ActionBar dropdown spinner items use the correct (white) theme as well
<style name="ActionBarWidget" parent="Theme.AppCompat.Light.DarkActionBar">
.
.

ActionBarWidget 主题是确保 ActionBar 溢出图标下拉菜单背景显示为白色而不是黑色所必需的。但是,它会导致 MediaRoute 按钮更改为它的深色主题可绘制对象,这不适合。

我试过覆盖 Widget.MediaRouter.MediaRouteButton和强制<item name="externalRouteEnabledDrawable">@drawable/mr_ic_media_route_holo_dark</item> ,但我所做的一切都无济于事。

我们如何在不更改可绘制对象名称的情况下将 MediaRoute 按钮设置为浅色或深色?是否有一种简单的样式可以覆盖我们可以设置自己的 MediaRoute 可绘制对象的位置?

最佳答案

尝试以下操作:

菜单.xml:

<item
android:id="@+id/media_route_menu_item"
android:title="@string/media_route_menu_title"
app:actionProviderClass="android.support.v7.app.MediaRouteActionProvider"
app:actionViewClass="com.???.MediaRouteButtonHoloDark"
app:showAsAction="always" />

MediaRouteButtonHoloDark:

public class MediaRouteButtonHoloDark extends MediaRouteButton {

public MediaRouteButtonHoloDark( Context context ) {
this( context, null );
}

public MediaRouteButtonHoloDark( Context context, AttributeSet attrs ) {
this( context, attrs, android.support.v7.mediarouter.R.attr.mediaRouteButtonStyle );
}

public MediaRouteButtonHoloDark( Context context, AttributeSet attrs, int defStyleAttr ) {
super( getThemedContext(context), attrs, defStyleAttr);
}

private static Context getThemedContext( Context context ) {
context = new ContextThemeWrapper( context, android.support.v7.appcompat.R.style.Theme_AppCompat );
return new ContextThemeWrapper( context, android.support.v7.mediarouter.R.style.Theme_MediaRouter );

}
}

在你的代码中的某处:

...
MenuItem mediaRouteMenuItem = menu.findItem( R.id.media_route_menu_item );
MediaRouteButton mediaRouteButton = (MediaRouteButton) MenuItemCompat.getActionView( mediaRouteMenuItem );
mediaRouteButton.setRouteSelector( mMediaRouteSelector );
...

关于android - 样式化 ChromeCast MediaRoute 按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24688598/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com