Android以XML格式访问SDK属性

时间:2016-04-01 20:00:10

标签: android xml android-layout attributes

我试图扩展Android simple_list_item_2,所以我复制了它的XML,即:

<TwoLineListItem xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?attr/listPreferredItemHeight"
    android:mode="twoLine"
    android:paddingStart="?attr/listPreferredItemPaddingStart"
    android:paddingEnd="?attr/listPreferredItemPaddingEnd">

    <TextView android:id="@id/text1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:textAppearance="?attr/textAppearanceListItem" />

    <TextView android:id="@id/text2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/text1"
        android:layout_alignStart="@id/text1"
        android:textAppearance="?attr/textAppearanceListItemSecondary" />

</TwoLineListItem>

问题是,在我的实现中,行

    android:textAppearance="?attr/textAppearanceListItemSecondary"/>

给出错误:

Cannot resolve symbol ?attr/textAppearanceListItemSecondary

我试过像:

android:textAppearance="android:?attr/textAppearanceListItemSecondary"

android:textAppearance="@android?attr/textAppearanceListItemSecondary" 但它不起作用

所以我的问题是,如何访问Android SDK资源中的布局可以访问的相同符号/属性?我是否需要将符号复制到我的应用程序目录,或者我可以只访问simple_list_item_2那个符号吗?

此外,原始simple_list_item_2位于C:\Android\sdk\platforms\android-23\data\res\layout\,如果有帮助,我的实施位于\app\src\main\res\layout

2 个答案:

答案 0 :(得分:2)

android:textAppearance="?android:attr/textAppearanceListItemSecondary"

Documentation

您需要将?放在包名前面,而不是在?[<package_name>:][<resource_type>/]<resource_name>

之后
  

引用样式属性
  样式属性资源允许您引用当前应用的主题中的属性值。引用样式属性允许您通过设置UI元素的样式来自定义UI元素的外观,以匹配当前主题提供的标准变体,而不是提供硬编码值。引用样式属性实质上是说“在当前主题中使用由此属性定义的样式”。

     

要引用样式属性,名称语法几乎与普通资源格式相同,但使用问号(?)代替at符号(?),资源类型部分是可选的。例如:

     

?[<package_name>:][<resource_type>/]<resource_name>

答案 1 :(得分:0)

您无法访问私有SDK属性,因此您必须复制它们。

在代码中使用反射可能是可能的,但在xml中肯定不行。