首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从attrs.xml崩溃中将背景设置为颜色引用

从attrs.xml崩溃中将背景设置为颜色引用
EN

Stack Overflow用户
提问于 2014-04-18 08:44:36
回答 1查看 408关注 0票数 2

我在主题中定义了一个颜色,如下所示:

attrs.xml

代码语言:javascript
复制
<attr name="defaultTextColor" format="color|reference" />

styles.xml

代码语言:javascript
复制
<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"就可以了。我想用这个颜色作为视图背景,但是这个程序崩溃了.为什么?我该怎么解决呢?

这只是崩溃:

代码语言:javascript
复制
<View
        android:layout_width="1dp"
        android:layout_height="match_parent"
        android:background="?defaultTextColor" />

编辑: logcat添加了

下面是用于此错误的logcat (第19行是上述度量视图的行):

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2014-04-18 10:02:29

我认为您不能简单地通过属性定义视图的背景。为了做到这一点,您需要创建一个自定义视图。

你可以找到更多的信息,这里

一个简单的例子是在src目录中创建一个单独的Java类:

代码语言:javascript
复制
public class SuperView extends View { 

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

之后,您将转到您的layout.xml并按如下方式添加您的自定义视图:

代码语言:javascript
复制
<my.application.SuperView 
    android:...../>       

您可以在xml中为该视图添加一些额外的公共属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23150623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档