2016-08-17 2 views
2

Salut, quelqu'un peut-il m'aider avec le dialogue de style qui apparaît après avoir cliqué sur MediaRouteButton? Chromecast dialogBoîte de dialogue de style après avoir cliqué sur MediaRouteButton

Un texte blanc est affiché sur un arrière-plan gris qui ne semble pas très bien.

android.support.v7.app.MediaRouteButton 

est enveloppé dans parent avec des styles

<FrameLayout 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:fitsSystemWindows="true" 
      app:popupTheme="@style/ThemeOverlay.AppCompat.Dark" 
      app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

(je sais que je devrais utiliser la barre d'outils ici, mais il ne correspond pas à mes besoins)

qui fonctionne bien sur MediaRouteButton qui devient blanc , mais cela n'a aucune influence sur les styles de dialogue.

J'ai essayé de regarder l'exemple d'application fourni par Google, mais je n'ai rien trouvé qui m'aide. Link to sample app styles

Mon thème actuel:

<style name="Theme.AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <!-- Customize your theme here. --> 
    <item name="colorPrimary">@color/colorPrimary</item>//Blue 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>//dark blue 
    <item name="colorAccent">@color/colorPrimary</item>//blue 
</style> 
+0

Avez-vous fait des progrès pour styliser le dialogue correctement? – elcolto

+0

Non, toujours pas de changement –

Répondre

3

trouvé une solution qui a fonctionné pour moi.

Au début, vous devez définir un MediaRouteDialogFactory personnalisé sur votre MediaRouteButton

mMediaRouteMenuItem = CastButtonFactory.setUpMediaRouteButton(this, menu, R.id.media_route_menu_item); 
MediaRouteButton mediaRouteButton = (MediaRouteButton) mMediaRouteMenuItem.getActionView() 
mediaRouteButton.setDialogFactory(new ThemeableMediaRouteDialogFactory()); 

Parce que la valeur par défaut MediaRouteDialogFactory toujours créer Dialogs non thématiques

@NonNull 
public MediaRouteControllerDialogFragment onCreateControllerDialogFragment() { 
    return new MediaRouteControllerDialogFragment(); 
} 

qui conduira à

public MediaRouteControllerDialog onCreateControllerDialog(
     Context context, Bundle savedInstanceState) { 
    return new MediaRouteControllerDialog(context); 
} 

mais il y a aussi un constructeur à thème MediaRouteControllerDialog(Context context, int theme) qui n'est pas appelée à partir de MediaRouteDialogFactory d'origine.

Ainsi, votre ThemeableMediaRouteDialogFactory devrait ressembler à ce

public class ThemeableMediaRouteDialogFactory extends MediaRouteDialogFactory { 
@NonNull 
@Override 
public MediaRouteChooserDialogFragment onCreateChooserDialogFragment() { 
    return new ThemeableMediaRouterChooserDialogFragment(); 
} 

@NonNull 
@Override 
public MediaRouteControllerDialogFragment onCreateControllerDialogFragment() { 
return new ThemeableMediaRouteControllerDialogFragment(); 
} 
} 

avec

public class ThemeableMediaRouterChooserDialogFragment extends MediaRouteChooserDialogFragment { 

@Override 
public MediaRouteChooserDialog onCreateChooserDialog(Context context, Bundle savedInstanceState) { 
    return new MediaRouteChooserDialog(context, R.style.CastChooserDialogTheme); 
} 
} 

et

public class ThemeableMediaRouteControllerDialogFragment extends MediaRouteControllerDialogFragment { 

@Override 
public MediaRouteControllerDialog onCreateControllerDialog(Context context, Bundle savedInstanceState) { 
    return new MediaRouteControllerDialog(context, R.style.CastControllerDialogTheme); 
} 
} 

Vos thèmes/styles peuvent également être personnalisés

<style name="DarkDialogTheme" parent="Theme.AppCompat.Dialog"> 
    <item name="colorPrimary">@color/charcoal_grey</item> 
    <item name="colorPrimaryDark">@color/charcoal_grey_dark</item> 
    <item name="colorAccent">@color/pumpkin_orange</item> 
    <item name="android:windowBackground">@color/dark_grey</item> 
    <item name="android:textColorPrimary">@android:color/white</item> 
    <item name="android:windowNoTitle">true</item> 
</style> 

<style name="CastChooserDialogTheme" parent="DarkDialogTheme"> 
    <item name="android:windowNoTitle">false</item> 
    <item name="mediaRouteChooserPrimaryTextStyle">@style/MediaRouteChooserPrimaryText</item> 
    <item name="mediaRouteChooserSecondaryTextStyle">@style/MediaRouteChooserSecondaryText</item> 
</style> 

<style name="CastControllerDialogTheme" parent="DarkDialogTheme"> 
    <item name="MediaRouteControllerWindowBackground">@color/dark_grey</item> 
    <item name="colorPrimary">@color/dark_grey</item> 
    <item name="mediaRouteCloseDrawable">@drawable/ic_dialog_close_dark</item> 
    <item name="mediaRouteControllerTitleTextStyle">@style/Widget.MediaRouter.ControllerText.Title.Dark</item> 
</style> 
+0

C'était super utile. Merci d'avoir pris le temps d'envoyer ce post. – masterwok