2016-08-17 3 views
2

Привет, может кто-нибудь помочь мне с диалогом стилей, который появляется после нажатия на MediaRouteButton? Chromecast dialogДиалог стиля после нажатия на MediaRouteButton

На сером фоне отображается белый текст, который выглядит не очень хорошо.

android.support.v7.app.MediaRouteButton 

заворачивают в родителю со стилями

<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"> 

(я знаю, что я должен использовать панель инструментов здесь, но это не соответствует моим требованиям)

, который хорошо работает на MediaRouteButton, который белеет , но он не влияет на стили диалога.

Я попытался посмотреть пример приложения Google, но я не нашел ничего, что мне помогло. Link to sample app styles

Моя текущая тема:

<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

Вы сделали какой-либо прогресс, чтобы правильно настроить диалог? – elcolto

+0

Нет, все еще нет изменений –

ответ

3

Найдено решение, которое работало для меня.

Сначала вы должны установить пользовательские MediaRouteDialogFactory на вашем MediaRouteButton

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

Причина по умолчанию MediaRouteDialogFactory всегда будет создавать неполноэкранные тематические Диалоги

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

, которые приведут к

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

, но есть также тематический конструктор MediaRouteControllerDialog(Context context, int theme) , который не вызывается из оригинала MediaRouteDialogFactory.

Так что ваш ThemeableMediaRouteDialogFactory должен выглядеть следующим образом

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

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

с

public class ThemeableMediaRouterChooserDialogFragment extends MediaRouteChooserDialogFragment { 

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

и

public class ThemeableMediaRouteControllerDialogFragment extends MediaRouteControllerDialogFragment { 

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

Ваши темы/стили также могут быть настроены

<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

Это было очень полезно. Спасибо, что нашли время, чтобы опубликовать это. – masterwok

 Смежные вопросы

  • Нет связанных вопросов^_^