如何设置 MediaRouter 对话框标题的样式?
How can I style the title of a MediaRouter dialog?
我正在使用 mediarouter-v7
v23.1.1 来显示 chromecast/媒体路由器选择器对话框。现在我尝试设计这个东西的样式 - 虽然我可以用这个改变背景颜色和列表项文本样式:
<style name="Theme.MediaRouter.Light">
<item name="android:background">@color/orange</item>
<item name="mediaRouteChooserPrimaryTextStyle">@style/my_custom_style</item>
</style>
我无法覆盖对话框标题的样式。这次和其他尝试都没有成功:
<style name="Theme.MediaRouter.Light">
<item name="android:windowTitleStyle">@style/my_title_style</item>
</style>
<style name="my_item_style">
<item name="android:textColor">@color/blue</item>
</style>
据我了解,对话框有其自己的 window,因此应该应用我在自定义样式中覆盖的(对话框)主题的 android:windowTitleStyle
,但事实并非如此。我还研究了 mediarouter 对话框的实现,看看它们是否做了任何花哨的事情(比如隐藏 window 并添加自定义元素作为它们的标题),但它们没有,它们只是调用 setTitle(...)
Dialog
实例。
我做错了什么?
不幸的是,该对话框不遵循标准主题(Android 中的对话框通常都非常不友好,但该对话框是最难处理的)。由于该对话框是由媒体路由器提供的,如果您将其完全替换为您自己的对话框,则只能提供自定义主题。
您可以尝试继承 MediaRouteDialogFactory 并覆盖 onCreateChooserDialogFragment() 方法并将您的实现传递给 ActionProvide:
mediaRouteActionProvider.setDialogFactory(您的对话框工厂实现)
您可以看一下 CCL,我在其中做了类似的事情,但不是针对选择器对话框,而是针对控制器
我正在使用 mediarouter-v7
v23.1.1 来显示 chromecast/媒体路由器选择器对话框。现在我尝试设计这个东西的样式 - 虽然我可以用这个改变背景颜色和列表项文本样式:
<style name="Theme.MediaRouter.Light">
<item name="android:background">@color/orange</item>
<item name="mediaRouteChooserPrimaryTextStyle">@style/my_custom_style</item>
</style>
我无法覆盖对话框标题的样式。这次和其他尝试都没有成功:
<style name="Theme.MediaRouter.Light">
<item name="android:windowTitleStyle">@style/my_title_style</item>
</style>
<style name="my_item_style">
<item name="android:textColor">@color/blue</item>
</style>
据我了解,对话框有其自己的 window,因此应该应用我在自定义样式中覆盖的(对话框)主题的 android:windowTitleStyle
,但事实并非如此。我还研究了 mediarouter 对话框的实现,看看它们是否做了任何花哨的事情(比如隐藏 window 并添加自定义元素作为它们的标题),但它们没有,它们只是调用 setTitle(...)
Dialog
实例。
我做错了什么?
不幸的是,该对话框不遵循标准主题(Android 中的对话框通常都非常不友好,但该对话框是最难处理的)。由于该对话框是由媒体路由器提供的,如果您将其完全替换为您自己的对话框,则只能提供自定义主题。
您可以尝试继承 MediaRouteDialogFactory 并覆盖 onCreateChooserDialogFragment() 方法并将您的实现传递给 ActionProvide:
mediaRouteActionProvider.setDialogFactory(您的对话框工厂实现)
您可以看一下 CCL,我在其中做了类似的事情,但不是针对选择器对话框,而是针对控制器