?android:attr / listDivider在插图drawable中不被识别为drawable

时间:2015-06-26 16:15:27

标签: android

我有这个简单的资源可绘制:

<inset xmlns:android="http://schemas.android.com/apk/res/android"
       android:drawable="?android:attr/listDivider"
       android:insetLeft="88dp"
       android:insetRight="16dp">
</inset>

这适用于带有5.1的Nexus 6,但在带有4.0.3的华为U9200E上我得到:

org.xmlpull.v1.XmlPullParserException: Binary XML file line #6: <inset> tag requires a 'drawable' attribute or child tag defining a drawable

我可以在其他属性中使用?android:attr/listDivider,并且我可以将其他drawable设置为我的插图drawable的drawable,但是这种组合在某些设备中显然不起作用。

为什么???

1 个答案:

答案 0 :(得分:0)

好吧,最后我不知道为什么它不起作用,但我可以设法让它以编程方式工作。这是如何:

    Resources r = getResources();
    TypedArray a = getTheme().obtainStyledAttributes(R.style.AppBaseTheme, new int[]{android.R.attr.listDivider});
    int attributeResourceId = a.getResourceId(0, 0);
    Drawable divider;
    if (Build.VERSION.SDK_INT >= 21) {
        divider = getDrawable(attributeResourceId);
    } else {
        divider = r.getDrawable(attributeResourceId);
    }
    a.recycle();

    int lpx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, RIGHT_MARGIN, r.getDisplayMetrics());
    int rpx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, LEFT_MARGIN, r.getDisplayMetrics());
    InsetDrawable insetDivider = new InsetDrawable(divider, lpx, 0, rpx, 0);

    mListView.setDivider(insetDivider);