根据文档:主题是应用于整个活动或应用程序的样式,而不是单个视图。
但是当我在 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" />
有人可以向我解释吗?
样式是指定视图的外观和格式的属性集合。样式可以指定高度、填充、字体颜色、字体大小、背景颜色等属性。
例如,通过使用样式,可以采用以下布局 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,如上面的文本视图所示。主题是一种风格。唯一的区别是主题是应用于整个活动或应用程序的样式,而不是单个视图。
将样式应用为主题时,活动或应用中的每个视图都会应用它支持的每个样式属性。例如,如果应用与活动主题相同的 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 提供其他内置资源一样,您可以使用许多预定义的主题,以避免自己编写它们。例如,您可以使用对话框主题并使活动看起来像对话框:
<activity android:theme="@android:style/Theme.Dialog">
或者,如果您希望背景透明,请使用半透明主题:
<activity android:theme="@android:style/Theme.Translucent">
您需要创建小部件样式并将其添加到应用程序主题中,最后在清单中添加应用程序主题。无需在每个视图中提及样式。就像样式文件中的"内部值"文件夹一样:
<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>