【问题标题】:Android styles and themes differenceAndroid风格和主题差异
【发布时间】:2016-06-05 09:56:53
【问题描述】:

根据文档:主题是应用于整个 Activity 或应用程序的样式,而不是单个视图

但是当我在 xml 中将主题添加到我的视图(文本视图)时,它已被编译并工作。 我认为当我想添加到单个视图时,我需要使用“样式”。

<TextView
android:id="@+id/textView1"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:theme="@style/TestTheme"
android:textSize="25dp"
android:text="TextView" />

谁能给我解释一下?

【问题讨论】:

    标签: android view styles themes


    【解决方案1】:

    您需要创建小部件样式并将其添加到您的应用主题中,最后将您的应用主题添加到清单中。无需在每个视图中提及样式。像这样在样式文件中的值文件夹中:

       <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
            <item name="colorPrimary">@color/colorPrimary</item>
            <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
            <item name="colorAccent">@color/colorAccent</item>
            <item name="android:textViewStyle">@style/TextViewStyle</item>
       </style>
    
       <style name="TextViewStyle" parent="android:Widget.TextView">
        <item name="android:background">@color/TextView_background</item>
        <item name="android:textColor">#16F20A</item>
        <item name="android:textStyle">bold</item>
       </style>
    
    
    In Your manifest file  inside application tag add the below line.
        <application
          android:theme="@style/AppTheme">
        </application>
    

    【讨论】:

    • 感谢您的回答,但我仍然不明白两者之间的真正区别是什么..
    • 你不需要在每个元素中指定样式,它就像通用的东西。
    • 假设你想改变一些小部件的颜色并且你没有使用上面的东西,那么你需要去你的xml中的每个元素并改变,但是如果你使用上面的方法那么你需要只需更改一个文件,它将适用于所有地方。
    • 非常感谢您的回答,因为这是我在研究中提出的一个问题,我需要提供带有参考的答案。有人可以帮我吗?
    【解决方案2】:

    style 是属性的集合,用于指定视图的外观和格式。样式可以指定高度、填充、字体颜色、字体大小、背景颜色等属性。

    例如,通过使用样式,您可以采用这种布局 XML:

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="#00FF00"
        android:typeface="monospace"
        android:text="@string/hello" />
    

    然后把它变成这样:

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="@style/CodeFont"
        android:text="@string/hello" />
    

    与样式相关的属性已从布局 XML 中删除,并放入名为 CodeFont 的样式定义中,然后使用 android:textAppearance 属性应用。

    要创建 CodeFont 样式,请将 XML 文件保存在项目的 res/values/ 目录中。这是一个例子:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <style name="CodeFont" parent="@android:style/TextAppearance.Medium">
            <item name="android:textColor">#00FF00</item>
            <item name="android:typeface">monospace</item>
        </style>
    </resources>
    

    此示例样式可以从 XML 布局中引用为 @style/CodeFont,如上面的 TextView 所示。 主题就是风格。唯一的区别是主题是应用于整个 Activity 或应用程序的样式,而不是单个视图。

    当一个样式被应用为主题时,活动或应用程序中的每个视图都会应用它支持的每个样式属性。例如,如果您将相同的 CodeFont 样式应用为活动的主题,则该活动内的所有文本都以绿色等宽字体显示。

    <resources>
        <style name="AppTheme" parent="Theme.Material">
            <item name="colorPrimary">#673AB7</item>
            <item name="colorPrimaryDark">#512DA8</item>
            <item name="colorAccent">#FF4081</item>
        </style>
    </resources>
    

    以下示例说明了使用引用为同一属性指定值:

    <resources>
        <style name="AppTheme" parent="Theme.Material">
            <item name="colorPrimary">@color/primary</item>
            <item name="colorPrimaryDark">@color/primary_dark</item>
            <item name="colorAccent">@color/accent</item>
        </style>
    </resources>
    

    要为应用程序的所有活动设置主题,请打开 AndroidManifest.xml 文件并编辑标签以包含带有样式名称的 android:theme 属性。例如:

    <application android:theme="@style/CustomTheme">
    

    如果您希望仅将主题应用于应用中的一个活动,则将 android:theme 属性添加到标签中。

    正如 Android 提供其他内置资源一样,您可以使用许多预定义的主题,以避免自己编写它们。例如,您可以使用 Dialog 主题并使您的活动看起来像一个对话框:

    <activity android:theme="@android:style/Theme.Dialog">
    

    或者如果您希望背景透明,请使用半透明主题:

    <activity android:theme="@android:style/Theme.Translucent">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-25
      • 1970-01-01
      • 2015-03-07
      • 2020-03-17
      • 1970-01-01
      • 2013-07-07
      • 2010-12-08
      相关资源
      最近更新 更多