2014-06-19 5 views
1

Google의 방법을 사용하여 앱에 전송 버튼을 추가하고 있지만 흰색 흰색 막대가 보이지 않는 흰색 아이콘이 기본값입니다. 전송 아이콘의 색상을 검정색으로 변경하려면 어떻게해야합니까?Chromecast 전송 아이콘 색상 변경

답변

1

스타일이 어둡거나 밝은 경우에만 스타일이 올바르게 정의되어 있어야합니다 (즉, 어두운 대 밝은 측면에서 올바른 테마를 확장하는 경우). 일반적인 스타일링의 경우 post을 확인해도 문제가 해결되지 않으면 다시 방문하여 알려주십시오.

+0

고마워요! 테마를 Theme.AppCompat.Light로 변경하여 문제를 해결했습니다. 그러나 이로 인해 내 앱의 기본 텍스트 색상이 검은 색으로 변경되었습니다. 기본 텍스트 색을 흰색으로 다시 설정하려면 어떻게 재정의 할 수 있습니까? – opticon

+0

충돌하는 스타일이있는 것 같습니다. Theme.AppCompat.Light는 밝은 테마를 사용한다는 것을 의미합니다. 따라서 색상의 텍스트가 밝은 배경에서 검정색으로 변합니다. 배경 테마가 어두울 경우 해당 테마를 사용하면 안됩니다. 보유하고있는 요구 사항으로 인해 테마를 고칠 수 없다면 해당 색상의 PNG를 제공하거나 응용 프로그램에 xml을 넣는 대신 포인터를 dar로 전환하는 것과 같은 방식으로 다른 게시물을 사용해야합니다 빛 대. –

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은 무슨 색 나는 원했다.

다음 그냥 같은 그에게 MediaRouteActionProvider에서 메뉴에 actionProviderClass을 대체 :

<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)) 갑자기 중지되었습니다. 일. 그래서, 당신의 영리한 솔루션을 발견하고 나는 임시 수정으로 정말 고마워요 :) –