Android中的样式层次——重要的顺序是什么



我有一个android应用程序,我正在与一个自定义主题应用于它在android manifest上的主要活动本身。这个活动创建了一个listview,并将样式应用于它。

如果我为listview创建一个自定义布局,包括为行本身创建一个单独的xml文件,并且我直接对这些布局应用样式,这种样式是否会覆盖应用程序的整体样式?我正试图掌握事件的层次结构,以及样式和主题是如何工作的。

我猜它在我的例子中工作的方式是:应用样式的行,由行布局xml引用>应用样式的整体listview,由listview布局xml引用>应用样式自定义主题,由android manifest引用的样式xml引用

我说的对吗?还是我写错了。(为了避免混淆,我所说的">"是指重要性大于)

如果您在多个地方指定了相同的属性,下面的列表将决定最终应用哪些属性。列表按优先级从高到低排序:

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

希望我明白你的问题…

你在styles.xml中定义的样式将总是覆盖来自android当前使用的主题的样式。

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

如果你不修改一个属性,android会为它提供样式,有时这会给你带来麻烦:)

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

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

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

标准主题有像这样的行来定义ListView的样式:

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

在你自己的主题中,你可以添加

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

在ListView样式中没有定义的东西(自己的或默认的),如果你在主题中定义了,就会在主题中定义。

相关内容

  • 没有找到相关文章

最新更新