Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么即使在全息灯动作条上,演员的MediaRouteButton也总是白色的?_Android_Android Actionbar_Android Theme_Chromecast_Android Styles - Fatal编程技术网

Android 为什么即使在全息灯动作条上,演员的MediaRouteButton也总是白色的?

Android 为什么即使在全息灯动作条上,演员的MediaRouteButton也总是白色的?,android,android-actionbar,android-theme,chromecast,android-styles,Android,Android Actionbar,Android Theme,Chromecast,Android Styles,我正在从一个自定义MediaRouteButton移动到操作栏中的一个按钮,但它不能正确显示。定制时的按钮是白色的,这正是我想要的。然而,尽管操作栏是“Holo.Light”样式,但按钮在操作栏上仍然是白色的(几乎看不见)。按钮应该是黑色的 按钮被创建为XML菜单项: <item android:id="@+id/menu_item_media_route" android:title="@string/menu_item_media_route" android:

我正在从一个自定义MediaRouteButton移动到操作栏中的一个按钮,但它不能正确显示。定制时的按钮是白色的,这正是我想要的。然而,尽管操作栏是“Holo.Light”样式,但按钮在操作栏上仍然是白色的(几乎看不见)。按钮应该是黑色的

按钮被创建为XML菜单项:

<item
    android:id="@+id/menu_item_media_route"
    android:title="@string/menu_item_media_route"
    android:actionViewClass="android.support.v7.app.MediaRouteButton"
    android:actionProviderClass="android.support.v7.app.MediaRouteActionProvider"
    android:showAsAction="always" />

我的应用程序的样式为“@style/AppTheme”:


我的主题活动“@style/FullscreenActionbarTheme”:


真的
真的
@空的
@空的
@样式/全屏操作栏
我没有定制的“ic|u media_route(on | off).png”绘图工具——我以前是这样做的,但后来删除了它们

我尝试过改变各种风格,虽然动作栏会变暗,但演员按钮总是白色的。(因为它应该位于深色的操作栏上,而不是浅色的。)

按钮功能齐全,只是颜色不对。当我按下按钮时出现的“选择器”对话框的样式为“全息灯”

那么,为什么我的演员按钮在“Holo.Light”主题上被涂成白色,就好像它是一个“Holo”(黑暗)主题一样呢?

摘自:

警告:在实施提供媒体路由器的活动时 接口必须扩展ActionBarActivity或FragmentActivity 从Android支持库,即使您的Android:Minsdk版本 API 11或更高

ActionBarActivity
已被
AppCompatActivity
取代,因此您应该使用它

Support-V7
MediaRouteButton
取决于此。查看
super
调用:

public MediaRouteButton(Context context, AttributeSet attrs, int defStyleAttr) {
    super(MediaRouterThemeHelper.createThemedContext(context), attrs, defStyleAttr);
    ....
    ....
}
MediaRouterThemeHelper.CreateMetedContext(上下文)


isLightTheme
是通过解析
R.attr.isLightTheme
来设置的。如果所有其他操作都失败,您可以在onCreate()中以编程方式更改颜色:


我的主要活动实际上来自
v4.FragmentActivity
,但我想这还不够。当我扩展
ActionBarActivity
(尚未升级到SDK v22)时,按钮的样式正确。然而,它现在以一种不同的方式显示,因为当动作栏显示或隐藏时,屏幕底部会在动画期间显示某种垃圾(Android 5.1)。是否有某种方法可以手动设置
R.attr.isLightTheme
,从而正确使用
v4.FragmentActivity
?@BrianWhite是的,当然,您可以切换
isLightTheme
。您拥有support-v7中定义的每个属性。将
true
添加到问题中的设置中。文档在此方面不是最新的,因为(如您所述)
FragmentActivity
选项不再起作用。当我扩展
ActionBarActivity
(尚未升级到SDK v22)时。。。不知道你在这里是什么意思@BrianWhite(续)。你在这里是指Android 5.0吗?-->。。。动画中的一些垃圾(安卓5.1)我这样问是因为您提到您还没有迁移到SDK v22。在任何情况下,我几乎可以肯定,您所观察到的是由于缺少窗口bg-您在这里请求:
@null
。由于您正在覆盖
操作栏
,请尝试在活动布局的基本容器中设置一个实心背景(任何带有完整alpha的颜色都可以)。@BrianWhite注意,通过在
AppTheme
下设置
isLightTheme
,您只是修复了一个漏洞。您可能需要在此过程中再修复一些。例如:
MediaRouteChooserDialog
利用
MediaRouterThemeHelper.getThemeResource(…)
获取设置为
R.attr.mediaRouteOffDrawable
的可绘制资源ID。在您的情况下,返回的值将是0,因为
AppTheme
没有定义
R.attr.mediaRouteOffDrawable
Theme.AppCompat.
没有定义)。要解决此问题,请在support-v7的主题文件(位于
Theme.AppCompat.Light
下)中查找
mediaRouteOffDrawable
,并将其反射回
AppTheme
。无论我当前的SDK版本是什么,它都有ActionBarActivity,但没有
AppCompatiActivity
。自从我上次用API21版本更新SDK以来,我认为它是随着API22的发布而出现的。我已经分配了
windowBackground
@null
。当Actionbar显示时,屏幕会向上跳(底部有垃圾),然后向下滑动。当ActionBar隐藏时,屏幕向上滑动,显示底部的垃圾,然后往下跳。将
isLightTheme
项添加到“我的主题”中可以正确地为按钮着色,但对话框(亮)现在变暗。鉴于条形按钮随着MediaRouter连接状态的改变而改变,过滤器是否会继续应用?
<style name="FullscreenActionbarTheme" parent="android:Theme.Holo.Light">
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowActionBarOverlay">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowBackground">@null</item>
    <item name="android:actionBarStyle">@style/FullscreenActionbar</item>
</style>

<style name="FullscreenActionbar" parent="@android:style/Widget.Holo.Light.ActionBar.Solid">
</style>
public MediaRouteButton(Context context, AttributeSet attrs, int defStyleAttr) {
    super(MediaRouterThemeHelper.createThemedContext(context), attrs, defStyleAttr);
    ....
    ....
}
public static Context createThemedContext(Context context) {
    boolean isLightTheme = isLightTheme(context);
    return new ContextThemeWrapper(context, isLightTheme ?
            R.style.Theme_MediaRouter_Light : R.style.Theme_MediaRouter);
}
private static boolean isLightTheme(Context context) {
    TypedValue value = new TypedValue();
    return context.getTheme().resolveAttribute(R.attr.isLightTheme, value, true)
            && value.data != 0;
}
   ImageButton button = ((ImageButton) toolbar.getChildAt( ... )); // The view index of the button
    button.setColorFilter(Color.BLACK, PorterDuff.Mode.MULTIPLY);