为什么主题未应用于自定义工具栏视图?

时间:2018-02-23 14:32:19

标签: android xamarin

所以我试图在Android中以编程方式创建工具栏。此工具栏及其抽屉布局以片段形式显示,该片段涵盖整个活动布局。

我遵循本指南:https://github.com/codepath/android_guides/wiki/Fragment-Navigation-Drawer

除了以编程方式执行所有操作(不使用XML)。

我有一个继承自工具栏的自定义类。它看起来像这样:

class MyToolbar : Android.Support.V7.Widget.Toolbar
{
    public MyToolbar(Context context, int defStyleAttr = Resource.Style.ThemeOverlay_AppCompat_Dark_ActionBar) : base(context, null, defStyleAttr)
    {
    }
}

当我使用上面的构造函数初始化它时,不会应用主题。文字很暗,菜单图标很暗,没有阴影,也没有背景。

为什么在这种情况下不应用主题?我想使用Resource.Style.ThemeOverlay_AppCompat_Dark_ActionBar。

1 个答案:

答案 0 :(得分:0)

defStyleAttr参数有点令人困惑,特别是考虑到那些错误使用它的众多例子。这并不意味着直接使用Style,而是将Attribute设置为Style主题中所需的Context设置值。这就是您的示例中未应用Style的原因,因为StyleAttribute s不可互换。

在这种情况下,动态应用Style的最简单方法可能是用Context包裹ContextThemeWrapper,并在base调用中传递它。对于Lollipop之前的版本,Toolbar内部支持theme View属性的内容与此基本相同。

由于未使用AttributeSet参数,我们可以使用Context - 仅构造函数。在Xamarin,我相信它会是这样的:

public MyToolbar(Context context) :
    base(new ContextThemeWrapper(context, Resource.Style.ThemeOverlay_AppCompat_Dark_ActionBar))