1

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

 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 出现时,它不再具有焦点上的橙色边框。这让我觉得造型很有效。但是,文本颜色仍为黑色。

4

3 回答 3

0

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

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

style="@style/CodeFont"

有关详细信息,请参阅Android 开发者网站

于 2012-09-10T15:19:46.077 回答
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>
于 2012-09-10T15:58:16.940 回答
0

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

  1. 在 Android 4.0 (Ice Cream Sandwich) 中,在 Activity 的属性部分指定主题名称存在一个已知问题: Cannot Resolve @style/Theme.Sherlock。如果您使用该属性来设置主题,那么编译器将返回"No resource found that match the given name (at 'theme' with value '@style/blah-blah'"。所以你想使用 SetTheme( ) Activity 的 OnCreate( ) 中的 API。
  2. 创建样式时,样式需要是您在第 1 步中引用的主题的一部分。确保您在主题中对样式进行分组(如果您愿意,可以从标准 Android 主题继承)。对于您的每个样式名称,您将需要创建一个属性引用,如步骤 1 中的链接中所述。以下链接是定义样式名称资源属性的“正确”方法: 如何创建自己的资源名称?
  3. 您需要通过在步骤 2 中定义的属性从主题中引用您的样式。例如: EditText et1 = new EditText(this, null, Resource.Attribute.CodeFontRef);
于 2012-09-11T20:46:19.430 回答