selectableItemBackground不适用于Android 4.4.2设备

时间:2015-08-10 15:36:05

标签: android onclick android-drawable

我正在尝试为onClick()中的每一行设置TableLayout突出显示。

我有一个可绘制的资源文件:

<item
    android:drawable="?android:attr/selectableItemBackground"
    android:state_focused="true"
    android:state_pressed="true" />

<!-- Bottom border -->
<item android:top="65dp" android:left="15dp">
    <shape xmlns:android="http://schemas.android.com/apk/res/android" >
        <size android:height="0.25dp"/>
        <solid android:color="@color/dark_blue"/>
    </shape>
</item>

我在三星Galaxy S5设备上进行了测试。 但是,当我在安装了Android 4.4.2的中兴Compel设备上进行测试时,它无效。

我的应用程序的目标是API 15及更高版本。

任何想法为什么:?android:attr/selectableItemBackground在Android 4.4.2设备上不起作用?

日志错误:

  

引起:org.xmlpull.v1.XmlPullParserException:二进制XML文件行#7:标记需要一个'drawable'属性或定义drawable的子标记

我有?attr/selectableItemBackground但它无法解决问题。 我做了大量的研究。

您方提出的任何其他建议吗?

1 个答案:

答案 0 :(得分:0)

问题出在我的可绘制资源文件中,我正在使用图层列表。

列表(或状态列表)中的可绘制属性不接受attr值。

但是,我无法在布局文件中设置此attr值,因为我还需要每个表格行的底部边框。

所以要修复它,在Java类文件中:

我在onCreate()方法中检索对每一行的引用。

实施例: TableRow row1 = (TableRow)findViewById(R.id.table_row_1);

然后我创建了一个方法来处理将属性添加到bottom_border可绘制文件中:

`void setRowHighlight(TableRow row) {
    // Attribute array
    int[] attrs = new int[] { android.R.attr.selectableItemBackground };

    TypedArray a = getTheme().obtainStyledAttributes(attrs);

    // Drawable held by attribute 'selectableItemBackground' is at index '0'
    Drawable d = a.getDrawable(0);

    a.recycle();

    if (Build.VERSION.SDK_INT < 16) {
        LayerDrawable ld = new LayerDrawable(new Drawable[] {

                // Table Rows Border Drawable
                getResources().getDrawable(R.drawable.table_rows_border),

                // Drawable from attribute
                d });

        // Set the background to 'ld'
        row.setBackgroundDrawable(ld);
    } else {
        LayerDrawable ld = new LayerDrawable(new Drawable[] {

                // Table Rows Border Drawable
                ResourcesCompat.getDrawable(getResources(), R.drawable.table_rows_border, null),

                // Drawable from attribute
                d });

        // Set the background to 'ld'
        row.setBackground(ld);
    }

}`

启用行突出显示,在onCreate()中调用我的方法: setRowHighlight(row1);

我已经在我的三星Galaxy S5设备(Android 5.0)和中兴通讯Compel设备(Android 4.4.2)上进行了测试,它可以正常运行。

参考:?android:attr/selectableItemBackground with another existing background