使用 ApplicationContext 实例化工具栏
Instanciating a Toolbar with an ApplicationContext
我可以创建一个 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,因为我希望我的工具栏显示在 activity 之外。有人能做到吗?
编辑:我希望我的工具栏在 SYSTEM_ALTERT_WINDOW 中,就像这里描述的 facebook Messenger 泡泡头:What APIs in Android is Facebook using to create Chat Heads?
显示您的 class。会想办法解决的。
尝试使用此方法获取上下文getApplicationContext()
或 activityName.this
。
如果能出示代码就更好了
您可以尝试将您的应用程序上下文包装在 ContextThemeWrapper
中,以使用从 AppCompat 扩展的主题来装饰裸应用程序上下文,如下所示:
Context context = new ContextThemeWrapper(getApplicationContext(), R.style.AppTheme);
此上下文将提供所有 AppCompat 属性,以便您可以通过编程方式创建小部件。
如果您想使用 AppCompat 小部件,则必须手动创建它们,例如new AppCompatImageView(...)
而不是 new ImageView(...)
.
此上下文也不提供 AppCompat 布局 inflater,因此框架小部件 不会 在 inflation 时自动替换为它们的 AppCompat 对应物。
我可以创建一个 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,因为我希望我的工具栏显示在 activity 之外。有人能做到吗?
编辑:我希望我的工具栏在 SYSTEM_ALTERT_WINDOW 中,就像这里描述的 facebook Messenger 泡泡头:What APIs in Android is Facebook using to create Chat Heads?
显示您的 class。会想办法解决的。
尝试使用此方法获取上下文getApplicationContext()
或 activityName.this
。
如果能出示代码就更好了
您可以尝试将您的应用程序上下文包装在 ContextThemeWrapper
中,以使用从 AppCompat 扩展的主题来装饰裸应用程序上下文,如下所示:
Context context = new ContextThemeWrapper(getApplicationContext(), R.style.AppTheme);
此上下文将提供所有 AppCompat 属性,以便您可以通过编程方式创建小部件。
如果您想使用 AppCompat 小部件,则必须手动创建它们,例如new AppCompatImageView(...)
而不是 new ImageView(...)
.
此上下文也不提供 AppCompat 布局 inflater,因此框架小部件 不会 在 inflation 时自动替换为它们的 AppCompat 对应物。