2016-03-02 47 views
0

我可以創建一個Toolbar編程傳遞一個ApplicationContext:Instanciating一個工具欄有一個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的信使泡頭:What APIs in Android is Facebook using to create Chat Heads?

+0

請發佈您的代碼 –

+0

切勿使用應用上下文處理視圖。視圖與活動相關聯,使用活動上下文。 –

+0

**在活動之外,您希望顯示工具欄的位置?**如果這甚至可能是一些高級別的東西,考慮到您的問題,您更可能誤解Android的一部分工作。那我們來了解一下。 –

回答

1

你可以嘗試包裹在ContextThemeWrapper您的應用程序上下文裝飾用從程序兼容性擴展,像這樣一個主題裸應用背景:

Context context = new ContextThemeWrapper(getApplicationContext(), R.style.AppTheme); 

這方面將提供一切程序兼容性屬性,以便您可以創建小部件編程。

如果您想使用AppCompat小部件,您必須手動創建它們,例如, new AppCompatImageView(...)而不是new ImageView(...)

此上下文也不提供AppCompat佈局inflater,所以框架小部件將而不是在通貨膨脹時會被其AppCompat自動替換。

+0

製作了這個訣竅,謝謝! – mbonnin

0

顯示類。將嘗試弄清楚。

嘗試使用此方法獲取上下文getApplicationContext()activityName.this

如果你顯示一些代碼會更好。

相關問題