2014-06-19 31 views
1

我使用Google的方法將投射按鈕添加到我的應用,但默認爲白色圖標,這對我的白色菜單欄是不可見的。如何將Cast圖標的顏色更改爲黑色?更改Chromecast投射圖標顏色

回答

1

如果僅僅是由於風格(暗vs光)造成的,如果風格被正確定義(即延伸正確的主題,暗vs光),你應該沒問題。對於一般造型,請查看post,如果這樣不能解決您的問題,請回來告訴我們。

+0

謝謝!通過將主題更改爲Theme.AppCompat.Light來解決此問題。但是,這將我的應用中的默認文本顏色更改爲黑色。我如何覆蓋它以將默認文本顏色設置回白色? – opticon

+0

聽起來像你有一些相互矛盾的樣式。 Theme.AppCompat.Light表示您使用的是輕量級主題,因此顏色文本會變爲黑色,以使其在淺色背景中可見。如果你的背景主題很暗,那麼你不應該使用這個主題。如果由於您的要求而無法修復主題,則需要在相同的帖子中使用另一種方法來提供適當顏色的PNG或將xml放入應用中,但將指針切換爲dar vs光。 –

1

我自己也遇到過這個問題,並通過將android:themeapp:popuptheme的值更改爲@style/ThemeOverlay.AppCompat.Dark.ActionBar來解決此問題。

參見下面的示例代碼:

<android.support.v7.widget.Toolbar 
     android:id="@+id/my_toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="#4dffffff" 
     android:elevation="4dp" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> 
1

我擴展MediaRouteButton。見下面的代碼。然後,我可以叫applyTint()和它的顏色應用到的RemoteIndicatorDrawable

public class ColorableMediaRouteButton extends MediaRouteButton { 

    protected Drawable mRemoteIndicatorDrawable; 

    public ColorableMediaRouteButton(Context context) { 
     super(context); 
    } 

    public ColorableMediaRouteButton(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

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

    @Override 
    public void setRemoteIndicatorDrawable(Drawable d) { 
     mRemoteIndicatorDrawable = d; 
     super.setRemoteIndicatorDrawable(d); 
    } 

    public void applyTint(int color) { 
     Drawable wrapDrawable = DrawableCompat.wrap(mRemoteIndicatorDrawable); 
     DrawableCompat.setTint(wrapDrawable, color); 
    } 
} 
1

所有國家我剛剛延長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); 
} 

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> 
+0

我試過這個官方解決方案([https://developers.google.com/cast/docs/android_sender_advanced#customize_cast_button](https://developers.google.com/cast/docs/android_sender_advanced#customize_cast_button)),但突然停止加工。 所以,我發現你的聰明的解決方案,我真的很喜歡它作爲一個臨時修復,謝謝:) –