Android在自定义项目上应用主题

时间:2012-04-24 09:43:54

标签: android styles themes

我可以声明一个主题和一个特定的按钮设计:

<style name="MyTheme" parent="android:style/Theme.Black">
  <item name="android:buttonStyle">@style/Button.b1</item>
</style>

<style name="Button.b1" parent="android:style/Widget.Button">
    <item name="android:textColor">#000000</item>
</style>

问题是此样式适用于所有按钮。我想声明一个具有自己风格的特定按钮,独立于其他按钮改变每个主题(类似于&#34; save&#34; -button)。任何的想法?


我尝试了以下内容:

<style name="Button.MyButton" parent="android:style/Widget.Button">
  <item name="android:background">@drawable/shape</item>
</style>

 <style name ="Button.MyButton.Theme1">
     <item name="android:textColor">#000000</item>
  </style>

 <style name ="Button.MyButton.Theme2">
     <item name="android:textColor">#FFFFFF</item>
  </style>

 <Button
     android:id="@+id/save_button" 
     android:layout_width="0px" 
     style="@style/Button.MyButton"
     android:layout_weight="1"
     android:layout_height="wrap_content"
     android:text="@string/save"/>

现在按钮独立于主题,但它也应该应用我在上面声明的样式属性。目前它只应用MyButton范围中声明的属性而不是MyButton.me1或MyButton.Theme2中的属性。

3 个答案:

答案 0 :(得分:3)

如果您的主题MyTheme仅用于定义按钮样式,请将其删除;同时从按钮中删除parent属性:

<style name="Button.b1">
    <item name="android:textColor">#000000</item>
</style>

然后在布局中,仅将样式用于您需要的按钮,如下所示:

 <Button
         android:id="@+id/btn_custom"
         style="@style/Button.b1"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content" >
 </Button>

答案 1 :(得分:1)

您可以从MyTheme删除styles.xml声明,并在所选按钮的@style/Button.b1属性中轻松设置android:style:)

编辑:我想我终于得到了你要求的东西。我没有尝试过,但它应该有效:

<!-- Declare your themes here -->
<style name="Theme1" parent="android:style/Theme.Black"></style>
<style name="Theme2" parent="android:style/Theme.Black"></style>

<!-- Declare your "abstract" Button style -->
<style name="MyButton" parent="android:style/Widget.Button">
  <item name="android:background">@drawable/shape</item>
</style>

<!-- Override MyButton style for Theme1 -->
<style name ="Theme1.MyButton" parent="@style/MyButton">
  <item name="android:textColor">#000000</item>
</style>

<!-- Override MyButton style for Theme2 -->
<style name ="Theme2.MyButton" parent="@style/MyButton">
  <item name="android:textColor">#FFFFFF</item>
</style>

答案 2 :(得分:0)

您应该仅将Button.b1样式直接用于那些希望以这种方式设置样式的按钮。使用这些按钮“android:style属性:

android:style="Button.b1"