在android中动态更改背景或前景按钮颜色

时间:2012-08-06 22:24:32

标签: android xml button colors onclick

假设我的应用程序中有如下所示的页脚,在footer.xml等XML文件中定义:

 <LinearLayout android:id="@+id/llfooter"
        android:layout_weight="1" android:layout_width="fill_parent"
        android:orientation="horizontal" android:layout_height="0dp"
        android:visibility="visible" android:background="@drawable/fbg"
        android:weightSum="5.0" android:gravity="center"
        android:layout_margin="0dp">

        <Button android:id="@+id/home" android:layout_height="wrap_content"
            android:layout_width="wrap_content" android:layout_weight="1"
            android:background="@drawable/home" android:textColor="#FFFFFF"
            android:padding="10px"></Button>

        <Button android:id="@+id/issue" android:layout_height="wrap_content"
            android:layout_width="wrap_content" android:layout_weight="1"
            android:background="@android:drawable/ic_menu_send" android:textColor="#FFFFFF"
            android:padding="10px"></Button>

        <Button android:id="@+id/browse" android:layout_height="wrap_content"
            android:layout_width="wrap_content" android:layout_weight="1"
            android:background="@android:drawable/ic_menu_slideshow" android:textColor="#FFFFFF"
            android:padding="10px"></Button>

        <Button android:id="@+id/search" android:layout_height="wrap_content"
            android:layout_width="wrap_content" android:layout_weight="1"
            android:background="@drawable/search" android:textColor="#FFFFFF"
            android:padding="10px"></Button>

        <Button android:layout_height="wrap_content" android:id="@+id/favorite"
            android:background="@drawable/favorite" android:layout_width="wrap_content"
            android:focusable="true"
            android:clickable="true"
            android:layout_weight="1"
            android:textColor="#FFFFFF" android:padding="10px"></Button>
    </LinearLayout>

现在,问题是主页问题浏览等是PNG图标,当我点击它们时,用户无法获得触摸的反馈,因为它们保持不变。

我想在按下它们时改变背景颜色(例如稍微轻一些)。我知道我可以在每个按钮上写下一个XML drawables(),例如下面的

  <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
      <item android:state_focused="true" android:state_pressed="true" 
            android:drawable="@drawable/bgalt" /> 
      <item android:state_focused="false" android:state_pressed="true" 
            android:drawable="@drawable/bgalt" /> 
      <item android:drawable="@drawable/bgnorm" /> 
  </selector>

..但如果我有10个按钮(例如,5为页脚,5为标题)我应该创建其他10个按钮,背景改变(因此更多的工作与图形编辑器和.apk更重,因为更多的光栅图标..) 。 有没有办法创建(甚至在java中)更轻的颜色&#34; onClick&#34;和正常的颜色&#34; onRelease&#34;相反,资源中每个功能只有一个图标?

有什么建议吗?

提前Tnx。 加博

2 个答案:

答案 0 :(得分:0)

使用ImageButton,并将android:src参数设置为具有透明背景的可绘制按钮,然后将android:background值设置为选择器drawable,例如在选择时改变颜色。

这样你就可以为你的图标设置一套drawable,只为背景设置一个drawable,它会根据按钮的状态而变化

答案 1 :(得分:0)

你可以在代码中获取onTouch中的按钮位图并改变颜色,但这是个坏主意。 选择器是最佳解决方案。