小编Séb*_*ien的帖子

根据主题属性设置视图背景会使应用程序崩溃

我正在尝试根据当前主题属性设置 ListView 背景颜色,但每次显示 ListView 时它都会崩溃。看来我做错了什么,但我看不到什么......

这是我在做什么:

首先,创建背景颜色:

<resources>
    <color name="userlist_background_light">#fff0f0f0</color>
    <color name="userlist_background_dark">#ff040404</color>
</resources>
Run Code Online (Sandbox Code Playgroud)

其次,为我的自定义主题创建属性:

<resources>
    <attr name="userlist_background" format="reference|color" />
</resources>
Run Code Online (Sandbox Code Playgroud)

第三,在我的主题中设置这个属性:

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="Light" parent="Theme.Sherlock.Light">
        <item name="userlist_background">@color/userlist_background_light</item>
    </style>

    <style name="Dark" parent="Theme.Sherlock">
        <item name="userlist_background">@color/userlist_background_dark</item>
    </style>
</resources>
Run Code Online (Sandbox Code Playgroud)

最后,在 ListView xml 中使用此属性:

<ListView
        android:id="@+id/user_bar"
        android:layout_width="0dip"
        android:layout_height="0dip"
        android:background="?attr/userlist_background"
        android:cacheColorHint="?userlist_background"
        android:visibility="gone" />
Run Code Online (Sandbox Code Playgroud)

甚至 Eclipse 布局视图也会崩溃。当然,如果我直接在背景属性中使用“@color/”,它就可以正常工作。如果我说“?android:attr/colorBackground”,它甚至可以工作。

消息错误是:

android.view.InflateException:二进制 XML 文件第 8 行:错误膨胀类 android.view.ListView 引起:android.content.res.Resources$NotFoundException:资源不是可绘制的(颜色或路径):TypedValue{t=0x2 /d=0x7f010068 a=-1}

我很确定我做错了什么,因为它适用于 android 属性,但是我在 Google 搜索中找不到什么。

我希望你能帮助我!

非常感谢,

塞巴斯蒂安。

android android-layout

7
推荐指数
1
解决办法
4288
查看次数

来自母保护字段的非静态数据成员初始化

我在尝试使用非静态数据成员init时遇到问题.在复杂的模板继承链中.我附上一个小的非工作示例:

struct Builder {
    template <typename T> T& get() {
        return a;
    };

    float a = 5;
};

struct Base {
    Builder a;
};

template <typename T> struct A: public Base {};

template <typename T> struct B: public A<T> {

    float& b = (A<T>::a).get<float>(); // Do not work

    Builder& builder = A<T>::a;
    float& c = builder.get<float>(); // Work
};

struct C: public A<float> {

    float& b = a.get<float>(); // Work
};

int main() {
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我最感兴趣的是class B …

c++ inheritance templates c++11

2
推荐指数
1
解决办法
78
查看次数

标签 统计

android ×1

android-layout ×1

c++ ×1

c++11 ×1

inheritance ×1

templates ×1