Android风格描述

时间:2012-01-20 16:35:22

标签: android android-layout android-widget android-3.0-honeycomb

我尝试改变旋转器的外观,但部分成功。我是通过覆盖主题的一部分来做到这一点的。我设法使用themes.xml和styles.xml更改微调器项的文本大小(即下拉按钮中的文本大小):

我的themes.xml文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomTheme" parent="@android:Theme.Holo.Light">
    <item name="android:windowActionBar">false</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:spinnerItemStyle">@style/CustomSpinnerItem</item>
</style>
</resources>

我的styles.xml文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<resources>

<style name="CustomSpinnerItem" parent="@android:Widget.TextView.SpinnerItem">
    <item name="android:textAppearance">@style/CustomTextAppearance</item>
</style>
<style name="CustomTextAppearance">
    <item name="android:textSize">30dp</item>
</style>

</resources>

但是,我无法在微调器的下拉列表中找到负责项目文本外观的属性。我尝试了dropDownItemStyle等等。在我看来,属性名称不是不言自明的,所以我想知道是否有一个文档说明哪个属性在样式中做什么来找出要覆盖的属性。我发现通过platfrom的themes.xml和styles.xml追溯主题中使用的所有样式非常麻烦,然后尝试通过反复试验找到正确的属性。

我知道可以通过将布局传递给适配器来改变外观,但是,这并不是我想要的,因为(据我所知),你只能在样式中使用继承而不能在布局中使用继承xml文件。如果我为适配器创建了自定义布局,我必须创建9个补丁图像等,我认为这有点太费时,以防我只想更改文本大小。

当然,我可能误解了整个概念,因为我是Android的新手;)

1 个答案:

答案 0 :(得分:1)

你可能已经找到答案了,但是对于其他看过类似问题的人来说:

我不知道一个属性名称列表,他们对它们的作用有很好的解释(R.attr的页面主要提供已经在名称中的信息),但我这样做的方式是:

  • 从我给setDropDownViewResource()的元素开始,在我的例子中:android.R.layout.simple_spinner_dropdown_item并找到。

  • 在\ sdk \ platforms \ android-17中查找其布局定义(特定平台版本以避免多余结果)。

  • 从布局文件中获取其样式。在这种情况下:?android:attr/spinnerDropDownItemStyle

我们现在拥有我们需要的属性名称。

最好这样做,而不是试图猜测要使用哪个属性,因为你知道系统本身使用哪个属性,所以它很可能是正确的(除非有错误)。

  

如果我为适配器创建了自定义布局,我必须创建   9补丁图像等。

嗯,不,布局决定了你将拥有什么样的GUI元素(文本字段,微调器,图像按钮,自定义元素......),而不是它们的样式(九个补丁背景,文本颜色。 ..),所以你仍然需要弄乱风格以获得正确的外观。

例如,为了视觉一致性,我将Theme.Holo中的按钮,复选框和微调器样式移植到Gingerbread,但我没有弄乱布局,我所做的只是前面提到的步骤以及查找结果({{1}在上面的例子中)在themes.xml中,它给了我样式名称(例如:spinnerDropDownItemStyle)。

然后我在styles.xml中查找 并在项目的styles.xml中导入它(以及任何父*),在我的项目中搜索和复制任何Holo特定的引用并相应地调整命名空间(将Widget.Holo.DropDownItem.Spinner添加到属性,并将android:替换为?android:attr,以便将我复制到我的styles.xml文件中。)

到目前为止,我根本不需要处理布局(即使Gingerbread上的微调器对话框中存在单选按钮也由xml属性确定:@style)。

  • 如果某个样式没有父属性(如android:checkMark),则其父级是相同的样式减去最后一个元素(例如:Widget.Holo.DropDownItem.Spinner