点击MediaRouteButton后的样式对话框

9

嗨,能否有人帮我处理一下点击MediaRouteButton后出现的对话框的样式吗?

Chromecast dialog

目前的样式是白色文字显示在灰色背景上,看起来不太好看。

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上运作良好,可以将其变为白色,但对对话框样式没有影响。

我尝试查看谷歌提供的示例应用程序,但我没有找到任何有帮助的东西。 链接到示例应用程序样式

我的当前主题:

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

你有没有在样式上正确地设置对话框方面取得进展? - elcolto
不,仍然没有变化。 - Adam Radomski
1个回答

17

我找到了适合我的解决方案。

首先,您需要在MediaRouteButton上设置自定义的MediaRouteDialogFactory。

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>

这非常有帮助。感谢您抽出时间发布这篇文章。 - masterwok

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接