如何在Android中使用基本样式?

时间:2012-09-10 15:06:39

标签: android android-styles

我很难让Android Styles工作。 作为测试,我创建了一个EditText控件,并将其与名为“CodeFont”的Style相关联,如下所示:

 EditText et = new EditText(this, null, Resource.Style.CodeFont);

接下来,我定义了一个继承自标准样式的样式,并将文本颜色更改为红色,如下所示:

  <resources>
      <style name="CodeFont" parent="@android:style/TextAppearance.Medium">
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:textColor">#FF0000</item>
        <item name="android:typeface">monospace</item>
      </style>
    </resources>

我做错了什么?出现EditText时,它不再具有焦点上的橙色边框。这让我觉得造型工作正常。但是,文本颜色仍为黑色。

3 个答案:

答案 0 :(得分:0)

除非您需要动态生成EditText,否则应使用XML,然后通过XML定义样式。这将您的GUI与您的代码分开,这可以带来很多好处。

像这样你可以简单地指定样式:

style="@style/CodeFont"

有关详细信息,请参阅Android developers' website

答案 1 :(得分:0)

由于您使用"@android:style/TextAppearance.Medium"作为父级样式,因此边框未显示。 TextAppearance.Medium是textAppearance属性样式,而不是窗口小部件样式。如果您想要橙色边框并且所有内容仍然显示但具有中等文本大小,那么您需要执行以下操作:

<style name="CodeFont" parent="@android:style/Widget.EditText">
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:textColor">#FF0000</item>
    <item name="android:textAppearance">@android:style/TextAppearance.Medium</item>
    <item name="android:typeface">monospace</item>
</style>

答案 2 :(得分:0)

确定。我终于找到了解决方案。我不得不从一些资源中将它拼凑起来。

  1. 在Android 4.0(冰淇淋三明治)中,在活动的属性部分中指定主题名称存在一个已知问题:Cannot Resolve @style/Theme.Sherlock。如果使用该属性设置主题,则编译器将返回“找不到与给定名称匹配的资源(在'theme'处,值为'@ style / blah-blah'”。所以你想要使用Activity的OnCreate()中的SetTheme()API设置主题。
  2. 当您创建样式时,样式需要成为您在步骤1中引用的主题的一部分。确保在主题中对样式进行分组(如果您愿意,可以继承标准的Android主题)。对于每个样式名称,您将需要创建属性引用,如步骤1中的链接所述。以下链接是定义样式名称资源属性的“正确”方法:How do I create my own resource names?
  3. 您需要通过您在步骤2中定义的属性从主题中引用您的样式。例如:  EditText et1 = new EditText(this,null,Resource.Attribute.CodeFontRef);