我怎样才能找到?android:attr/dividerVertical的定义?

Pie*_*syP 5 android themes android-layout

我想看看divider vertical的定义,我不确定属性的含义是什么,但是当点击到intellij中的属性定义时,我被带到attrs.xml并显示以下内容,没有帮助.

<!-- Drawable to use for generic vertical dividers. --> 
<attr name="dividerVertical" format="reference" />
Run Code Online (Sandbox Code Playgroud)

我的具体问题是我正在尝试使用dividerVertical样式实现带有插入列表分隔符的列表.为了做到这一点,我已经定义了自己的插图形状.

<inset xmlns:android="http://schemas.android.com/apk/res/android"
   android:insetLeft="30dip"
   android:insetRight="30dip">
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
    <solid android:color="?android:attr/dividerVertical"/>
</shape>
</inset>
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为android不会接受"?android:attr/dividerVertical"作为颜色.它无论如何都不会起作用,因为divider vertical有一个alpha分量,所以我需要知道的是什么颜色和不透明度是分隔线垂直?但理想情况下我想知道如何检查android中任何资源组件的来源,以便我再也不会遇到这个问题.

谢谢

皮尔斯

Niz*_*zam 10

根据developer.android,?[<package_name>:][<resource_type>/]<resource_name>用于引用主题属性.
因此,?android:attr/dividerVertical您可以导航到android-sdk\platforms\android-16\data\res\values.在那里,看看attrs.xml,你可以看到

<!-- Drawable to use for generic vertical dividers. -->
<attr name="dividerVertical" format="reference" />
Run Code Online (Sandbox Code Playgroud)

但这只是该主题的"参考".查看目标平台的themes.xml,您可以找到许多不同主题的行

<item name="dividerVertical">@drawable/divider_vertical_dark</item>
Run Code Online (Sandbox Code Playgroud)

您想要的行是您正在使用的主题的主题元素中包含的行.最简单的方法是将整个主题元素复制到另一个文本文件并在那里搜索.这会带来什么

<item name="dividerVertical">?android:attr/listDivider</item>
Run Code Online (Sandbox Code Playgroud)

您可以在主题中再次搜索"listDivider"

<item name="listDivider">@drawable/list_divider_holo_dark</item>
Run Code Online (Sandbox Code Playgroud)

所以这是一个可绘制的.

搜索您可以找到的匹配文件

./platforms/android-16/data/res/drawable-hdpi/list_divider_holo_dark.9.png
./platforms/android-16/data/res/drawable-mdpi/list_divider_holo_dark.9.png
./platforms/android-16/data/res/drawable-xhdpi/list_divider_holo_dark.9.png
Run Code Online (Sandbox Code Playgroud)

这些png恰好是9个补丁,其内容由白色方块组成,alpha值为38.