2014-04-18 32 views
2

我在我的主題定義的顏色類似以下內容:設置背景從attrs.xml顏色參考崩潰

attrs.xml

<attr name="defaultTextColor" format="color|reference" /> 

styles.xml

<style name="BaseLightTheme" parent="@style/Holo.Theme.Light"> 
<item name="defaultTextColor">@color/primary_text_holo_light</item> 
... 
</style> 

<style name="BaseDarkTheme" parent="@style/Holo.Theme"> 
<item name="defaultTextColor">@color/primary_text_holo_dark</item> 
... 
</style> 

每當我使用這個文字顏色,只需使用android:textColor="?defaultTextColor"工作正常。我想用這種顏色作爲視圖背景,但是這會使應用程序崩潰......爲什麼?我該如何解決這個問題?

這只是崩潰:

<View 
     android:layout_width="1dp" 
     android:layout_height="match_parent" 
     android:background="?defaultTextColor" /> 

編輯:logcat的加入

這裏是我的logcat這個錯誤(第19行是上述meantioned視圖的線):

04-18 11:12:05.654: E/ACRA(8006): android.view.InflateException: Binary XML file line #19: Error inflating class <unknown> 
04-18 11:12:05.654: E/ACRA(8006): at org.holoeverywhere.LayoutInflater._createView(LayoutInflater.java:262) 
04-18 11:12:05.654: E/ACRA(8006): at org.holoeverywhere.LayoutInflater.onCreateView(LayoutInflater.java:470) 
04-18 11:12:05.654: E/ACRA(8006): at org.holoeverywhere.LayoutInflater.createViewFromTag(LayoutInflater.java:316) 
04-18 11:12:05.654: E/ACRA(8006): at org.holoeverywhere.LayoutInflater.rInflate(LayoutInflater.java:604) 
04-18 11:12:05.654: E/ACRA(8006): at org.holoeverywhere.LayoutInflater.inflate(LayoutInflater.java:422) 
04-18 11:12:05.654: E/ACRA(8006): at org.holoeverywhere.LayoutInflater.inflate(LayoutInflater.java:372) 
04-18 11:12:05.654: E/ACRA(8006): at org.holoeverywhere.LayoutInflater.inflate(LayoutInflater.java:367) 
04-18 11:12:05.654: E/ACRA(8006): at com.mf.androfit.fragments.WorkoutFragment$CardioViewFragment.onCreateViewHandler(WorkoutFragment.java:865) 
04-18 11:12:05.654: E/ACRA(8006): at com.mf.activitylibrary.fragments.BaseFragment.onCreateView(BaseFragment.java:185) 
04-18 11:12:05.654: E/ACRA(8006): at android.support.v4.app._HoloFragment.onCreateView(_HoloFragment.java:124) 
04-18 11:12:05.654: E/ACRA(8006): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1478) 
04-18 11:12:05.654: E/ACRA(8006): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:928) 
04-18 11:12:05.654: E/ACRA(8006): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1105) 
04-18 11:12:05.654: E/ACRA(8006): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
04-18 11:12:05.654: E/ACRA(8006): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1461) 
04-18 11:12:05.654: E/ACRA(8006): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472) 
04-18 11:12:05.654: E/ACRA(8006): at com.mf.pagermanager.MFragStatePagerAdapter.finishUpdate(MFragStatePagerAdapter.java:170) 
04-18 11:12:05.654: E/ACRA(8006): at android.support.v4.view.ViewPager.populate(ViewPager.java:1068) 
04-18 11:12:05.654: E/ACRA(8006): at android.support.v4.view.ViewPager.populate(ViewPager.java:914) 
04-18 11:12:05.654: E/ACRA(8006): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436) 
04-18 11:12:05.654: E/ACRA(8006): at android.view.View.measure(View.java:15696) 
04-18 11:12:05.654: E/ACRA(8006): at org.holoeverywhere.widget.LinearLayout.measureVertical(LinearLayout.java:877) 
04-18 11:12:05.654: E/ACRA(8006): at org.holoeverywhere.widget.LinearLayout.onMeasure(LinearLayout.java:956) 
04-18 11:12:05.654: E/ACRA(8006): at android.view.View.measure(View.java:15696) 
04-18 11:12:05.654: E/ACRA(8006): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4851) 
04-18 11:12:05.654: E/ACRA(8006): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
04-18 11:12:05.654: E/ACRA(8006): at android.view.View.measure(View.java:15696) 
04-18 11:12:05.654: E/ACRA(8006): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4851) 
04-18 11:12:05.654: E/ACRA(8006): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
04-18 11:12:05.654: E/ACRA(8006): at android.view.View.measure(View.java:15696) 
04-18 11:12:05.654: E/ACRA(8006): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4851) 
04-18 11:12:05.654: E/ACRA(8006): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
04-18 11:12:05.654: E/ACRA(8006): at android.view.View.measure(View.java:15696) 
04-18 11:12:05.654: E/ACRA(8006): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4851) 
04-18 11:12:05.654: E/ACRA(8006): at org.holoeverywhere.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:452) 
04-18 11:12:05.654: E/ACRA(8006): at org.holoeverywhere.widget.LinearLayout.measureVertical(LinearLayout.java:784) 
04-18 11:12:05.654: E/ACRA(8006): at org.holoeverywhere.widget.LinearLayout.onMeasure(LinearLayout.java:956) 
04-18 11:12:05.654: E/ACRA(8006): at android.view.View.measure(View.java:15696) 
04-18 11:12:05.654: E/ACRA(8006): at android.support.v4.widget.MySlidingPaneLayout.onMeasure(MySlidingPaneLayout.java:523) 
04-18 11:12:05.654: E/ACRA(8006): at android.view.View.measure(View.java:15696) 
04-18 11:12:05.654: E/ACRA(8006): at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:639) 
04-18 11:12:05.654: E/ACRA(8006): at android.view.View.measure(View.java:15696) 
04-18 11:12:05.654: E/ACRA(8006): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4851) 
04-18 11:12:05.654: E/ACRA(8006): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
04-18 11:12:05.654: E/ACRA(8006): at org.holoeverywhere.widget.WindowDecorView.onMeasure(WindowDecorView.java:113) 
04-18 11:12:05.654: E/ACRA(8006): at android.view.View.measure(View.java:15696) 
04-18 11:12:05.654: E/ACRA(8006): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4851) 
04-18 11:12:05.654: E/ACRA(8006): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
04-18 11:12:05.654: E/ACRA(8006): at android.view.View.measure(View.java:15696) 
04-18 11:12:05.654: E/ACRA(8006): at org.holoeverywhere.widget.LinearLayout.measureVertical(LinearLayout.java:877) 
04-18 11:12:05.654: E/ACRA(8006): at org.holoeverywhere.widget.LinearLayout.onMeasure(LinearLayout.java:956) 
04-18 11:12:05.654: E/ACRA(8006): at android.view.View.measure(View.java:15696) 
04-18 11:12:05.654: E/ACRA(8006): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4851) 
04-18 11:12:05.654: E/ACRA(8006): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
04-18 11:12:05.654: E/ACRA(8006): at com.android.internal.policy.impl 
+0

發佈你的logcat然後 –

+0

這樣做......我只是得到一個'InflateException' ... – prom85

+0

在L他們修復了一個問題,你不能使用顏色drawables的屬性引用。你在運行什麼版本?它應該在api 21上工作。不幸的是,您不能在早期版本中使用顏色屬性參考。 – dcow

回答

0

我不認爲你可以簡單地通過屬性定義一個視圖的背景。 爲了做到這一點,您需要創建一個自定義視圖。

你可以找到更多信息here

一個簡單的例子是,在你的src目錄下創建一個單獨的Java類:

public class SuperView extends View { 

//You set all background attributes through your java code. 
} 

後,你去你的layout.xml和添加自定義視圖,例如:

<my.application.SuperView 
    android:...../>  

您可以在xml中爲該視圖添加一些其他常用屬性。