Android中的样式层次结构 - 重要性的顺序是什么?

时间:2011-07-13 20:24:38

标签: android xml user-interface mobile

我有一个Android应用程序,我正在使用自定义主题在主要活动本身的android清单中应用它。此活动创建一个列表视图,其中应用了样式。

如果我为该列表视图创建自定义布局,包括行本身的单独xml文件,并且我将样式直接应用于这些布局,这种样式是否会覆盖应用程序的整体样式?我试图掌握事件的层次结构,就样式和主题的工作方式而言。

我在其示例中使用它的方式是:对行应用样式,由行布局xml引用>应用整体列表视图的样式,由listview layout xml>引用;从自定义主题应用样式,由android manifest

引用的样式xml引用

我是对的吗?或者我正在接近这个错误。 (仅仅是为了混淆,“>”我的意思是重要性比)

3 个答案:

答案 0 :(得分:0)

希望我能理解你的问题......

您在styles.xml中定义的样式将始终覆盖来自android当前使用的主题的样式。

但这仅适用于您覆盖的属性。

如果你保持一个属性不受影响,android将为它提供样式,有时这会让你在对接中咬你:)

这个系统最好用这样描述: textview需要属性示例

<item name="android:textColor">#00FF00</item>

Android将首先查看原始布局。 如果找不到,它将查看您的自定义样式。 如果没有找到,它会调查android样式。

希望这有帮助。

答案 1 :(得分:0)

标准主题具有定义ListView样式的行:

    <item name="listViewStyle">@android:style/Widget.ListView</item>

在你自己的主题中你可以做一个

    <item name="listViewStyle">@style/MyOwnListView</item>

ListView样式中未定义的内容(拥有或默认)将是主题中定义的内容(如果已在其中定义)。

答案 2 :(得分:0)

如果您在多个位置指定了相同的属性,则下面的列表确定最终应用哪些属性。该列表按从高到低的顺序排列:

  1. 通过文本范围将字符级或段落级样式应用于TextView派生的类
  2. 以编程方式应用属性
  3. 将各个属性直接应用于视图
  4. 将样式应用于视图
  5. 默认样式
  6. 将主题应用于视图,活动或整个应用的集合
  7. 应用某些特定于视图的样式,例如在TextView上设置TextAppearance