繁体   English   中英

android中的主题

[英]Themes in android

创建一个简单的主题为

 <style name='one'>
    <item name='android:textColor'>#eea</item>
    <item name='android:textSize'>20sp</item>
    </style>

但是,在模拟器中查看时,屏幕会变黑。当我不应用主题时,屏幕背景为白色。 这里真正发生了什么。我只是从android开始。 另外,如果将主题应用于我的活动,则该主题的属性将应用于我的活动的所有组件,例如按钮,文本字段和edittexts。 我为什么要写

android:textSize=?android:textSize 

当已经应用相同的值时,从主题中引用布局中任何按钮的值。

是在我的主题中引用属性以将其分配给布局中任何视图的属性的正确方法上方的语法。 谢谢tejinder

是的,因此您需要阅读更多内容。

让我们从基础开始

您需要了解属性,样式和主题之间的区别。

属性是可以样式化的东西。 例如: android:textSize是可以具有任何值的属性。

样式是一组将应用于窗口小部件的特定属性 它们在您的/values/styles.xml中定义

例如:

<style name="normalTextThin" parent="android:Widget.Holo.Light.TextView">
    <item name="android:gravity">left|center_vertical</item>
    <item name="android:padding">8dp</item>
    <item name="android:textColor">#FFFFFF</item>
    <item name="android:textSize">16sp</item>
</style>

样式可以作为主题的一部分或直接作为主题无关的施加。

小部件的主题独立样式如下:

 <TextView
    android:id="@+id/text"
    style="@style/normalTextThin"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

然后,您主题化的一个TextView的。

主题样式的集合,可以应用于您的UI的一部分,例如整个Activity或整个Application。

例如:

<style name="AppTheme" parent="android:Theme.Light">
    <item name="android:editTextStyle">@style/EditTextAppTheme</item>
    <item name="android:buttonStyle">@style/ButtonAppTheme</item>
    <item name="android:imageButtonStyle">@style/ImageButtonAppTheme</item>
</style>

在这里,我们声明您的应用程序中的所有 EditText都将使用名为EditTextAppTheme样式 ,依此类推。 这样做后,为了使主题真正生效,可以在清单中声明它:

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

这意味着您无需在创建的每个小部件上声明样式。

<EditText
    android:id="@+id/input"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/hint_search">
    <requestFocus />
</EditText>

在那里的那个部件已经可以使用EditTextAppTheme设置样式,而无需您明确声明。

我建议您尝试阅读可以设置样式的属性,如何设置样式的样式等等。

但是,如果您不想这样做,可以使用以下样式工具来完成很多工作:

希望能有所帮助。

附加信息

让我澄清一下整个?attr/attributeName

? 表示系统将为当前配置选择特定的attributeName值(不特定于不同的主题)。 仅当您希望该值在不同配置上不同时才应使用此选项。 例如:

?android:attr/actionBarSize

这条线是一个尺寸,它不是基于当前主题而是基于当前设备屏幕的大小和方向(值,values-land,values-sw600dp)而不同。

重要的是要知道指定?android:意味着您正在访问预设的Android值,而不是您的值。 如果您具有或想要创建自己的属性值并将其用于特定配置,则必须执行以下操作:

在/ values /文件夹上创建一个名为attrs.xml文件。

声明所需的自定义属性:

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <attr name="my_custom_attr" format="reference" />
</resources>

为自定义属性声明一个值,比如说您自己的主题。

<style name="AppTheme" parent="android:Theme.Light">
    <item name="my_custom_attr">@resource_type/resource_name</item>
    <item name="android:editTextStyle">@style/EditTextAppTheme</item>
    <item name="android:buttonStyle">@style/ButtonAppTheme</item>
    <item name="android:imageButtonStyle">@style/ImageButtonAppTheme</item>
</style>

然后,您可以在所需的小部件上使用它:

希望能把事情弄清楚。

编辑2

为了更好地回答您的问题,请更新您的问题。 就像我说的,请阅读更多有关如何正确创建样式的信息。

  1. 主题名为“一个”,您想将其应用到什么? 一个活动,一个小部件,整个应用程序?
  2. 您如何应用主题? 显示指定主题“ one”用法的代码行。

您指定的主题根本不是正确构建的主题/样式。

<style name='one'>
<item name='android:textColor'>#eea</item>
<item name='android:textSize'>20sp</item>
</style>

这绝对没有说什么,而且绝对不适合活动级别的主题。 指定父级的原因是,主题可以继承父级的 所有属性,然后指定要更改的属性。

例如,如果您要使用主题并具有浅色背景,请执行以下操作:

<style name='one' parent="android:Theme.Holo.Light>
    <item name='android:textColor'>#eea</item>
    <item name='android:textSize'>20sp</item>
</style>

但是即使在这里,尽管事实上它会适用,但您不想整个应用程序具有相同的文本颜色和大小吗? 那是胡说八道,不同的文本颜色和大小占了用户体验的很大一部分,因此我们可以创建子样式并将其应用于某些小部件,而不是从我们称为主要样式的那些值中进行设置。

我不能再详细介绍我已经拥有的东西,以上内容解释了如何完成特定于Widget的样式以及活动/应用程序级别的主题。

要获得完整的入门指南,请阅读Android开发者网站 ,尝试在那里声明的测试样式,查看其工作方式,然后再尝试创建自己的样式,如果没有阅读过的内容,请不要尝试无所不在的创建东西。制作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM