opt*_*con 3 android chromecast
我正在使用谷歌的方法将Cast按钮添加到我的应用程序,但它默认为白色图标,这对我的白色菜单栏是不可见的.如何将Cast图标的颜色更改为黑色?
我只是像这样扩展MediaRouteActionProvider:
public class ThemeableMediaRouteActionProvider extends MediaRouteActionProvider {
public ThemeableMediaRouteActionProvider(Context context) {
super(context);
}
@Override
public MediaRouteButton onCreateMediaRouteButton() {
MediaRouteButton button = super.onCreateMediaRouteButton();
colorWorkaroundForCastIcon(button);
return button;
}
@Nullable
@Override
public MediaRouteButton getMediaRouteButton() {
MediaRouteButton button = super.getMediaRouteButton();
colorWorkaroundForCastIcon(button);
return button;
}
private void colorWorkaroundForCastIcon(MediaRouteButton button) {
if (button == null) return;
Context castContext = new ContextThemeWrapper(getContext(), android.support.v7.mediarouter.R.style.Theme_MediaRouter);
TypedArray a = castContext.obtainStyledAttributes(null,
android.support.v7.mediarouter.R.styleable.MediaRouteButton, android.support.v7.mediarouter.R.attr.mediaRouteButtonStyle, 0);
Drawable drawable = a.getDrawable(android.support.v7.mediarouter.R.styleable.MediaRouteButton_externalRouteEnabledDrawable);
a.recycle();
DrawableCompat.setTint(drawable, getContext().getResources().getColor(R.color.primary));
drawable.setState(button.getDrawableState());
button.setRemoteIndicatorDrawable(drawable);
}
}
Run Code Online (Sandbox Code Playgroud)
R.color.primary是我想要的颜色.
然后将菜单中的actionProviderClass从MediaRouteActionProvider替换为:
<item
android:id="@+id/media_route_menu_item"
android:title="@string/media_route_menu_title"
bwq:actionProviderClass="tv.test.playback.chromecast.ThemeableMediaRouteActionProvider"
bwq:showAsAction="always">
</item>
Run Code Online (Sandbox Code Playgroud)
官方答案在这里:
https://developers.google.com/cast/docs/android_sender/customize_ui#customize_cast_button
自定义投射按钮
要将自定义添加
mediaRouteTheme到应用程序的主题:Run Code Online (Sandbox Code Playgroud)<style name="Theme.CastVideosTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- ... --> <item name="mediaRouteTheme">@style/CustomMediaRouterTheme</item> </style>声明您的自定义媒体路由器主题并声明一个自定义
mediaRouteButtonStyle:Run Code Online (Sandbox Code Playgroud)<style name="CustomMediaRouterTheme" parent="Theme.MediaRouter"> <item name="mediaRouteButtonStyle">@style/CustomMediaRouteButtonStyle</item> </style> <style name="CustomMediaRouteButtonStyle" parent="Widget.MediaRouter.Light.MediaRouteButton"> <item name="mediaRouteButtonTint">#EEFF41</item> </style>
mediaRouteButtonTint如果支持库版本高于 26.0.0,则应使用。对于较旧的支持库版本,请改用buttonTint。
如果视图的投射图标只有一种颜色,请为片段或活动使用主题。
<item name="mediaRouteButtonTint">@color/red</item>
Run Code Online (Sandbox Code Playgroud)
如果您想以编程方式设置颜色,请使用以下代码。
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_item"
android:title="@string/media_route_menu_title"
app:actionProviderClass="androidx.mediarouter.app.MediaRouteActionProvider" />
</menu>
Run Code Online (Sandbox Code Playgroud)
import androidx.core.content.ContextCompat
import androidx.appcompat.view.ContextThemeWrapper
import androidx.core.graphics.drawable.DrawableCompat
...
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater?) {
val tintColor = ContextCompat.getColor(context, R.color.my_color)
val item = menu.findItem(R.id.menu_item)
val button = item.actionView
val castContext = ContextThemeWrapper(context, androidx.mediarouter.R.style.Theme_MediaRouter)
val attrs = castContext.obtainStyledAttributes(null, androidx.mediarouter.R.styleable.MediaRouteButton, androidx.mediarouter.R.attr.mediaRouteButtonStyle, 0)
val drawable = attrs.getDrawable(androidx.mediarouter.R.styleable.MediaRouteButton_externalRouteEnabledDrawable)
attrs.recycle()
DrawableCompat.setTint(drawable, tintColor)
drawable.state = button.getDrawableState()
button.setRemoteIndicatorDrawable(drawable)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3930 次 |
| 最近记录: |