2 jonahzheng jonahzheng 于 2013.04.12 19:49 提问

关于设置Android Button按钮状态(normal,focused,pressed)图片,有没有简便的方法

Android Button按钮状态(normal,focused,pressed)的图片
大都用drawable "selector" 来实现
类似
btn_background.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_pressed" /> <!-- pressed -->
     <item android:state_focused="true"
           android:drawable="@drawable/btn_normal" /> <!-- focused -->
     <item android:drawable="@drawable/btn_normal" /> <!-- default -->
</selector>
layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<Button  
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/btn_background"
    />
</LinearLayout>

上面这种做法,意味每一个按钮都要定义它的selector,如果按钮很多,这工作量不说,也太繁琐了,现在就碰到一个项目,里面需要单独定义的按钮非常多。
不知各位大侠,有没有想出方便的方案。多谢了

2个回答

huzgd
huzgd   2013.04.14 16:06
已采纳

可以考虑继承Button或ImageButton做个自定义控件,并在自定义控件中加两个自定义状态图片的属性(如android:focusedBackground,android:pressedBackground),然后就可以直接在界面的XML里写这两个属性,如:

    < com.xxx.xxx.MyImageButton android:id="xxx"
  android:layout_width="wrap_content" 
  android:layout_height="wrap_content" 
  android:background="xxx"
  android:focusedBackground="xxx"
  android:pressedBackground="xxx"
/>

关于自定义控件中如何读取自定义属性,网上有现成的例子资料参考,如:
http://www.cnblogs.com/xiaoQLu/archive/2011/07/20/2112004.html

suannai0314
suannai0314 帮你编辑了下代码部分的格式,更多markdown使用见http://ask.csdn.net/pages/markdown
接近 5 年之前 回复
CuGBabyBeaR
CuGBabyBeaR   2013.04.12 20:06

可以给按钮一个OnTouchListener 在其中处理....

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!