我可以通过编程方式将Toolbar传递给ApplicationContext:
Toolbar toolbar = new Toolbar(applicationContext);
但是当我尝试使用它时失败了:
Menu menu = toolbar.getMenu();
toolbar.setTitle("");
MenuItem item = menu.add(mContext.getString(R.string.HDLabel));
item.setCheckable(true);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
我得到以下异常:
Caused by: java.lang.UnsupportedOperationException: Failed to resolve attribute at index 5: TypedValue{t=0x2/d=0x7f01010b a=-1}
at android.content.res.TypedArray.getColorStateList(TypedArray.java:482)
at android.widget.TextView.<init>(TextView.java:1043)
at android.widget.TextView.<init>(TextView.java:671)
at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:60)
at android.support.v7.view.menu.ActionMenuItemView.<init>(ActionMenuItemView.java:72)
at android.support.v7.view.menu.ActionMenuItemView.<init>(ActionMenuItemView.java:68)
其他一些人遇到了同样的问题:Upgrading to SDK 21 - Error inflating class android.support.v7.internal.widget.ActionBarContainer。
但我真的想使用ApplicationContext,因为我希望我的工具栏显示在活动之外。有没有人能够这样做?
编辑:我希望我的工具栏在SYSTEM_ALTERT_WINDOW中,就像这里描述的facebook messenger泡泡头:What APIs in Android is Facebook using to create Chat Heads?答案 0 :(得分:1)
您可以尝试将应用程序上下文包装在ContextThemeWrapper
中,以使用从AppCompat扩展的主题来装饰裸应用程序上下文,如下所示:
Context context = new ContextThemeWrapper(getApplicationContext(), R.style.AppTheme);
此上下文将提供所有AppCompat属性,以便您可以以编程方式创建窗口小部件。
如果您想使用AppCompat小部件,则必须手动创建它们,例如new AppCompatImageView(...)
代替new ImageView(...)
。
此上下文也不提供AppCompat布局inflater,因此框架窗口小部件将在通知时自动替换为其AppCompat对应的
。答案 1 :(得分:0)
展示你的课程。将尝试解决这个问题。
尝试使用此方法获取上下文getApplicationContext()
或activityName.this
。
如果你展示一些代码会更好。