所以我试图在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。
答案 0 :(得分:0)
defStyleAttr
参数有点令人困惑,特别是考虑到那些错误使用它的众多例子。这并不意味着直接使用Style
,而是将Attribute
设置为Style
主题中所需的Context
设置值。这就是您的示例中未应用Style
的原因,因为Style
和Attribute
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))