为什么样本使用?什么时候引用样式listSeparatorTextViewStyle?

时间:2014-08-15 06:57:48

标签: android android-xml android-styles

我想使用一种风格的Android库。我认为我应该对@属性使用style(案例2),但我看到了网站上的一个示例,它使用了?(案例1)。我不知道为什么。

Android lib是否同时包含命名的listSeparatorTextViewStyle资源和名为listSeparatorTextViewStyle属性的样式?是的,我确实在系统android lib attrs.xml中找到了名为listSeparatorTextViewStyle属性的样式,但是在哪里可以找到命名的listSeparatorTextViewStyle资源?

这是代码和效果

案例1

<TextView
    android:id="@+id/dialog_title"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    style="?android:attr/listSeparatorTextViewStyle"  
/>

Case1.GIF

案例2

<TextView
    android:id="@+id/dialog_title"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    style="@android:attr/listSeparatorTextViewStyle"  
/>

Case2.GIF

2 个答案:

答案 0 :(得分:2)

引用资源属性:

  • 可以使用R.java中的整数从代码中引用资源,例如R.drawable.myimage
  • 可以使用特殊的XML语法(例如@drawable/myimage
  • )从资源中引用资源

引用样式属性:

  • A style attribute resource allows you to reference the value of an attribute in the currently-applied theme. Referencing a style attribute allows you to customize the look of UI elements by styling them to match standard variations supplied by the current theme, instead of supplying a hard-coded value. Referencing a style attribute essentially says, "use the style that is defined by this attribute, in the current theme."

  • To reference a style attribute, the name syntax is almost identical to the normal resource format, but instead of the at-symbol (@), use a question-mark (?), and the resource type portion is optional.

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

<强> EX ::

   <EditText id="text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="?android:textColorSecondary"
    android:text="@string/hello_world" />
  • Here, the android:textColor attribute specifies the name of a style attribute in the current theme. Android now uses the value applied to the android:textColorSecondary style attribute as the value for android:textColor in this widget. Because the system resource tool knows that an attribute resource is expected in this context, you do not need to explicitly state the type (which would be ?android:attr/textColorSecondary)—you can exclude the attr type.

参考 :: Android Docs - 全部

答案 1 :(得分:0)

第一个有趣的问题!

我查看了R.stylable的参考指南,它在文本的几个部分中提到了以下内容:

必须是@[+][package:]type:name形式的其他资源或?[package:][type:]name形式的主题属性的引用。

找到this page后,我得到了完整的解释:

以下是引用XML 资源中的资源的语法:

@[<package_name>:]<resource_type>/<resource_name>
  • <package_name>是资源所在的包的名称(在引用同一包中的资源时不需要)
  • <resource_type>是资源类型
  • 的R子类
  • <resource_name>可以是没有扩展名的资源文件名,也可以是XML元素中的android:name属性值(对于简单值)。

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

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

结论:在引用样式属性时引用资源(}和@时使用?。如果你没有抓住它,我强烈建议你阅读Accessing Resources guide