首页 > 解决方案 > 我在哪里可以找到 selectableItemBackgroundBorderless 参考属性的定义?

问题描述

我在哪里可以找到 ?attr/selectableItemBackgroundBorderless 的定义?

例如:

<ImageButton
    android:id="@+id/removeButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="end"
    android:layout_margin="8dp"
    android:background="?attr/selectableItemBackgroundBorderless"
    android:contentDescription="@string/content_description"
    android:tint="@color/colorPrimaryText"
    app:srcCompat="@drawable/ic_cancel" />

我的意思是我可以在 appcompat-1.2.0\res\values\values.xml 中看到参考定义,即:

<item name="selectableItemBackgroundBorderless">?attr/selectableItemBackground</item>

但是这个属性是在哪里定义的呢?

标签: androidattributesandroid-appcompatandroid-theme

解决方案


在我的安装中,我正在使用:

compileSdkVersion 29
minSdkVersion 21
targetSdkVersion 29

我发现 selectableItemBackgroundBorderless 在 \AppData\Local\Android\Sdk\platforms\android-29\data\res\values\themes_material.xml 中定义,其中:

<item name="selectableItemBackgroundBorderless">@drawable/item_background_borderless_material</item>

然后在 AppData\Local\Android\Sdk\platforms\android-29\data\res\drawable\item_background_borderless_material.xml

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?attr/colorControlHighlight" />

和 colorControlHighlight 在 Android\Sdk\platforms\android-29\data\res\values\themes_material.xml 中定义为:

<item name="colorControlHighlight">@color/ripple_material_light</item>

@color/ripple_material_light 在 Android\Sdk\platforms\android-29\data\res\color\ripple_material_light.xml 中定义为:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:alpha="@dimen/highlight_alpha_material_light"
          android:color="@color/foreground_material_light" />
</selector>

多么荒谬的旅程……


推荐阅读