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

样式化ChromeCast MediaRoute按钮

葛宏爽
2023-03-14

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

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

看看这里的一个类似问题:如何更改ActionBar中MediaRouteButton的样式?公认的解决方案只是使用您自己的MediaRoute绘图集,并交换名称

对于我的应用程序,我有3种不同的风格:浅色ActionBar、深色ActionBar和浅色solid ActionBar。我不能简单地交换可绘制的名称,因为我需要深色和浅色来正确显示前两个主题。为了正确显示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按钮更改为黑色主题可绘制,这不适合。

我已经尝试覆盖小部件。MediaRouter。媒体路由按钮和强制

我们如何设计MediaRoute按钮的浅色或深色,而不改变可绘制的名称?是否有一种简单的样式可以覆盖我们可以设置自己的MediaRoute绘图选项的位置?

共有2个答案

葛玉堂
2023-03-14

我也遇到了类似的空指针异常问题。我没有使用CastCompanyLibrary,但我这样解决了它:

1)不要在菜单定义中使用app:actionProviderClass。

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

2)搜索代码或CCL试图获取ActionProvider的位置,如果没有找到ActionProvider,则只需使用MediaRouteButton搜索ActionView。这样地:

....
MenuItem mediaRouteMenuItem = menu.findItem( R.id.media_route_menu_item );

MediaRouteActionProvider mediaRouteActionProvider = (MediaRouteActionProvider) MenuItemCompat.getActionProvider( mediaRouteMenuItem );
if (null!=mediaRouteActionProvider) {
    Log.i( TAG, "MediaRouteActionProvider found" );
    mediaRouteActionProvider.setRouteSelector( mMediaRouteSelector );
    return;
}

MediaRouteButton mediaRouteButton = (MediaRouteButton) MenuItemCompat.getActionView( mediaRouteMenuItem );
if (null!=mediaRouteButton) {
    Log.i( TAG, "MediaRouteButton found" );
    mediaRouteButton.setRouteSelector( mMediaRouteSelector );
    return;
}
....

我希望这会有所帮助。

艾志尚
2023-03-14

请尝试以下操作:

menu.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按钮添加/删除样式?是否可以在运行时应用样式? 我有两个看起来像这样的按钮 我想做的是单击一个按钮时(让我们说按钮B),它运行一些代码,然后将按钮B的样式更改为其他样式(即突出显示的边框),并且将是这样的: 我知道如何在XML中进行样式设置(即创建样式),我只想知道如何在运行时/使用Java代码应用样式。 问题答案: 让我们为您编写一些案例代码::)为了

  • Button组件通常由Text元素组成,该元素用TouchableHighlight(或其他touchable)包装。我正在尝试创建一个使用styled-components样式的按钮组件,但是我的样式很难动态响应道具。 下面,我创建了一个按钮组件,类似于样式化组件文档中的Adapting based on props示例。 导入后,我用的按钮是这样的... 所以,我希望我的纽扣看起来像这样...

  • 本文向大家介绍Android按钮美化样式的实现代码,包括了Android按钮美化样式的实现代码的使用技巧和注意事项,需要的朋友参考一下 话不多说,上运行效果图 在drawable文件夹下 新建button_drawable.xml 在button属性中引用即可 总结 以上所述是小编给大家介绍的Android按钮美化样式的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家

  • 问题内容: 我有一个活动,其底部有一个“保存并取消”按钮。 在AlertDialog中,按钮显示在某种样式的容器视图内。 我怎样才能使“活动”中的按钮具有相同的外观?具体来说,如何在AlertDialog中应用按钮容器视图的样式,在包含按钮的Activity中说一个LinearLayout? 谢谢 问题答案: 我做这样的事情: 然后,我使用dialogLayout调用findViewById()来

  • 问题内容: 我正在尝试更改带有嵌入式图像的按钮的样式 恐怕示例中没有图像。 我试图: 禁用时更改按钮的 禁用时更改按钮中的图像 禁用时禁用悬停效果 当您单击按钮中的图像并将其拖动时,可以分别看到该图像。我想避免那个 可以选择按钮上的文本。我也想避免这种情况。 我试过了。但是无法禁用某些效果。喜欢 和形象。 问题答案: 对于禁用的按钮,您可以使用伪元素。它适用于所有元素。 仅对于支持CSS2的浏览器

  • 问题内容: 问题: 在哪里可以找到带有十六进制颜色代码的默认样式xml? 我在寻找’buttonStyle’样式,其他默认样式会影响诸如TextViews,Buttons等方面(如果您不更改方面的样式) 我抬头望去,但实际上没有找到想要的东西。 希望我的问题清楚。 由于信誉低,我无法回答这个问题。这是答案 回答 稍作谷歌搜索,我发现’buttonStyle’实际上是’Widget.Button’-