是否可以将一组样式应用于ViewGroup中的所有内容?

时间:2017-08-01 14:51:50

标签: android android-theme android-styles

在Android的文档中,样式资源仅影响它应用的特定视图,而不影响其下的子视图。相比之下,主题(实际上只是在活动或应用程序级别应用的样式)会影响其域中的所有内容。到目前为止一切都很好。

我想知道的是,我是否可以应用一个主题'但仅适用于我的UI的特定部分。例如,我使用LinearLayout作为一种特殊的Smart-Bar(将其视为一个美化的状态/工具栏),因此,我喜欢任何(大)子视图&&添加了#39;以使用tintColor属性的特定值。 (所有子控件都具有通过getter / setter和关联属性定义的色调颜色。)

目前,这需要在添加时手动将tintColor属性手动添加到所有子项。当有孙子参与时,事情变得更加复杂,这可能是包含布局等的一部分。

我希望简单的主题'这是基于LinearLayout的,但我没有看到任何方法来实现这一点。那可以吗?

1 个答案:

答案 0 :(得分:1)

在父视图中使用android:theme属性。

考虑这个示例布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="text 1"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="text 2"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="text 3"/>

</LinearLayout>

这会产生以下预览:

enter image description here

但是,如果我将android:theme="@style/BlueText"添加到LinearLayout,我现在会看到:

enter image description here