android将颜色变量传递给XML中的复杂按钮样式

时间:2014-01-28 18:55:54

标签: android xml android-button android-styles

我有一个按钮的样式,如:http://ace-subido.github.io/css3-microsoft-metro-buttons/buttons.html(参见剥离按钮)。 但我想能够将这种风格用于不同的颜色,而无需重新创建4个xml文件(选择器可绘制+ 3个按钮表示带有图层列表的绘图)。

在btn_stripped_orange.xml中(以及另外2个不同按钮状态的xml)我有一个颜色

使用这种语法,evrything是可以的: - )

但是我没有为每种不同的颜色创建4个新的xml文件,而是想“传递颜色”到btn_stripped_orange.xml(所以我应该将它重命名为btn_stripped.xml)。

在style.xml中,我必须调用@ drawable / btn_stripped_orange_selector 在此btn_stripped_orange_selector调用之后

我想我必须通过调用@ drawable / btn_stripped_orange_selector将border_color变量传递给styles.xml中的样式 我想用@ drawable / btn_stripped_orange_selector创建新的样式作为android:background(并重命名)和颜色变量

这是我正在尝试的代码(在eclipse中没有错误,但运行时app崩溃),如果我用颜色@ color / orange替换?attr / border_color例如,它可以很好地工作。我认为这只是一个语法问题。

我的themes.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <style name="btn_orange" parent="@style/btStripped1">
    <item name="border_color">@attr/border_color</item>
  </style>
  <attr name="border_color" format="color" />
</resources>

我的btn_stripped_orange_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/btn_stripped_orange_press" />
    <item android:state_focused="true" android:drawable="@drawable/btn_stripped_orange_focus" />
    <item android:drawable="@drawable/btn_stripped_orange" />
</selector>

我的btn_stripped_orange.xml(几乎与_focus和_press相同):

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape android:shape="rectangle">
        <solid android:color="?attr/border_color" />
    </shape>
</item>
<item android:left="5dp">
    <shape android:shape="rectangle">
        <solid android:color="#EEEEEE" />
    </shape>
</item>
<item android:left="5dp">
    <shape android:shape="rectangle">
        <solid android:color="#EEEEEE" />
    </shape>
</item>
</layer-list>

最后在我的styles.xml

 <resources> 
   .....
    <style name="btStripped1">
      <!-- I want to pass a color variable here -->
     <item name="android:background">@drawable/btn_stripped_orange_selector</item>
      <item name="android:padding">6dp</item>
              <item name="android:textColor">@android:color/black</item>
              <item name="android:shadowColor">@android:color/white</item>
              <item name="android:shadowDx">1</item>
              <item name="android:shadowDy">1</item>
              <item name="android:shadowRadius">1</item>
        </style>
   ....
 </resources>

我想要一个纯xml解决方案但是如果它不可能并且你有一些java代码的解决方案,那么欢迎你!

非常感谢你的帮助,对不起普通英语感到抱歉!

0 个答案:

没有答案