当前位置: 首页 > 知识库问答 >
问题:

selectableItemBackground不适用于Android 4.4.2设备

阎修杰
2023-03-14

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

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

<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/可选项后台不能在Android4.4.2设备上工作?

日志中的错误:

由以下原因引起:组织:二进制 XML 文件行 #7:标记需要“可绘制”属性或定义可绘制的子标记

我有 ?attr/可选项目后台,但它不能解决问题。我做了大量的研究。

您方面还有其他建议吗?

共有1个答案

松铭
2023-03-14

问题出在我的可绘制资源文件中,我使用的是层列表。图层列表(或状态列表)中的可绘制属性不接受属性值。

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

为了解决这个问题,在Java类文件中:

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

示例:< code > TableRow row row 1 =(TableRow)findViewById(r . id . table _ row _ 1);

然后,我创建了一个方法,用于将属性添加到bottom_border drawable文件:

`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与另一个现有背景

 类似资料:
  • 代码如下: 这是适配器,我在这里为列表做了自己的设计(< code>R.layout.zalistu),它在仿真器中工作,但在设备上它给我一个错误(应用程序意外停止),如果我使用< code>simple_list_item_1,那么它在仿真器和我的设备上都可以正常工作。 这里是R:layout.zalistu: 日志猫: 我设备上的Android版本是2.3.7,模拟器上的版本是4.0.4(AP

  • 编辑:Android Studio很慢地告诉我已弃用。由于某种原因,直到编写并运行代码很久之后,它才告诉我。然而,问题仍然存在。我只是想在我的问题中加入这个发现。 我有一个充当指南针的ImageView。在真实设备上一切都正常,但在我的模拟器上,扩展控件对ImageView没有影响。 如果我在模拟器上使用谷歌地图,我可以看到指南针在工作。如果我的应用程序在真实设备上运行,为什么它的工作原理不一样?

  • 问题内容: 嗨,我只是简单地尝试在www.example.com上获取h1标签,该标签显示为“ Example Domain”。该代码适用于http://www.example.com,但不适用于https://www.exmaple.com。我该如何解决这个问题?谢谢 问题答案: PhantomJSDriver不支持(所有)DesiredCapabilities。 你会需要: 记录在这里:htt

  • 所以我使用这种方法写入文件,它在windows上运行完全正常,但在mac上运行时,它会创建文件,但它们是空的。 我知道数据是正确的,因为它打印正确。感谢您的任何帮助,这真的让我绊倒了。

  • 我是Android开发的新手 我试图在应用程序中创建自定义标题栏。它正在模拟器中工作。但是当我在我的设备上运行这个应用程序时…它停止了(没有加载) 自定义标题栏的 XML 代码 我的活动类中的代码 模拟器中没有问题...它在那里工作正常,但在真实设备中不起作用,如果有人请告诉我解决方案。

  • 列名称的类型为int[] 上述查询适用于postgresql,但不适用于hsqldb,甚至适用于sql 尝试的hsqldb版本:2.2.9和2.3.0 在hsqldb中工作的sql是从table_name中选择x,unnest(column_name)y(x)x和y不是该表的列。