是的,所以你需要做更多的阅读。
让我们从基础开始,
您需要了解属性、样式和主题之间的区别。
属性是可以设置样式的东西。例如:android:textSize
是一个可以有任何值的属性。
样式是一组将应用于 Widget的特定属性。它们在您的/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 或整个应用程序。
例如:
<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、values-land、values-sw600dp)而有所不同。
重要的是要知道指定?android:
意味着您正在访问预设的 Android 值,而不是您的。如果您拥有或想要为特定配置创建和使用自己的属性值,则必须执行以下操作:
attrs.xml
在您的 /values/ 文件夹中创建一个名为的文件。
声明所需的自定义属性:
<?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>
然后你可以在你想要的 Widget 上使用它:
希望能解决问题。
编辑 2
为了更好地回答您的问题,请更新您的问题。就像我说的,阅读更多关于如何正确创建样式的信息。
- 名为“one”的主题,您想将其应用于什么?一个活动,一个小部件,整个应用程序?
- 你是如何应用主题的?显示您指定使用主题“one”的代码行。
您指定的主题根本不是正确构建的主题/样式。
<style name='one'>
<item name='android:textColor'>#eea</item>
<item name='android:textSize'>20sp</item>
</style>
这绝对没有任何意义,它绝对不适合 Activity 级别的主题。您指定父级的原因是您的主题可以继承父级的所有属性,然后您指定要更改哪些属性。
例如,如果您想使用主题并拥有浅色背景,请执行以下操作:
<style name='one' parent="android:Theme.Holo.Light>
<item name='android:textColor'>#eea</item>
<item name='android:textSize'>20sp</item>
</style>
但是即使在这里,尽管它会适用,但您不希望整个应用程序具有相同的文本颜色和大小,对吗?那是胡说八道,不同的文本颜色和大小占用户体验的很大一部分,因此我们可以创建子样式并将它们应用于某些小部件,而不是从我们可以称为主要样式的设置这些值。
我真的不能再详细说明我已经拥有的东西了,上面解释了如何完成特定于 Widget 的样式和活动/应用程序级别的主题。
要获得完整的启动指南,请阅读Android 开发者网站,尝试那里声明的测试样式,看看它们是如何工作的,在此之前尝试创建自己的,如果没有阅读过,请不要尝试凭空创造一些东西制成。