20

R.styleable、R.style 和 R.attr 有什么区别?我在所有这三个类中都找到了 TextAppearance。

4

2 回答 2

23

R.style具有 android 提供的所有样式(包括提供的所有 Theme android)。例如,Theme.TranslucentWidget.AbsListView

R.attr提供了所有的attrs android(可以设置为视图或窗口)。例如,layout_width可以设置为视图,windowIsFloating可以设置为窗口。

R.styleable具有android提供的特定视图或窗口的所有属性,并且可以在样式中定义。例如,FrameLayout_Layout_layout_gravity: layout_gravity 可以为 FrameLayout 设置样式,Window_windowIsFloating: 指示这是否是浮动窗口的标志。

为了回答您的问题,TextAppearance 是一个属性(R.attr)并且它被声明为可样式化的 attrs.xml:

<attr name="textAppearance" format="reference" />
<declare-styleable name="TextViewAppearance">
     <!-- Base text color, typeface, size, and style. -->
     <attr name="textAppearance" />
</declare-styleable>

TextAppearance也是一个Theme/Style(Theme只是一种风格),styles.xml:

<style name="TextAppearance">
    <item name="android:textColor">?textColorPrimary</item>
    <item name="android:textColorHighlight">?textColorHighlight</item>
    <item name="android:textColorHint">?textColorHint</item>
    <item name="android:textColorLink">?textColorLink</item>
    <item name="android:textSize">16sp</item>
    <item name="android:textStyle">normal</item>
</style>

以防万一你不明白什么是“?” 意思是,检查:Android XML 属性中的问号 (?) 如果您对什么是可声明样式感到困惑,请检查:声明样式和样式之间的区别

于 2014-04-05T19:24:28.290 回答
0

R.style 用于主题定义(为要在布局中重用的元素配置默认或特定样式集)。

R.styleable 包含单独的属性。R.attr 用于定义自定义视图的属性。假设您创建了自己的名为 CardView 的自定义视图,它接收 2 个字符串,然后根据这些字符串的大小构建其布局。您可以将这些设置为通过 R.attr 在您的 XML 布局中分配的属性(更多信息/更好的解释在这里)。

于 2013-01-02T22:52:28.520 回答