ImageButton 点击与小圆点消息数提示(一些对以前的更新)

我们在定义一个drawable的时候可以通过xml定义的drawable对象。它使得一个图片能在不同的状态下显示不同的图案,比如一个Button,它有pressed,focused,或者其它状态,通过使用state list drawable,你就可以为每种状态提供不同的图片。

例如:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/efax_tab_inbox_disabled" android:state_enabled="false"/>
    <item android:drawable="@drawable/efax_tab_inbox_p" android:state_selected="true"/>
<!--这样被按下后就会切换为另一张图片--!>
    <item android:drawable="@drawable/efax_tab_inbox_p" android:state_pressed="true"/>
    <item android:drawable="@drawable/efax_tab_inbox"/>

</selector>

各属性解释如下:

android:drawable 放一个drawable资源
android:state_pressed 是否按下,如一个按钮触摸或者点击。
android:state_focused 是否取得焦点,比如用户选择了一个文本框。
android:state_hovered 光标是否悬停,通常与focused state相同,它是4.0的新特性
android:state_selected 被选中,它与focus state并不完全一样,如一个list view 被选中的时候,它里面的各个子组件可能通过方向键,被选中了。
android:state_checkable 组件是否能被check。如:RadioButton是可以被check的。
android:state_checked 被checked了,如:一个RadioButton可以被check了。
android:state_enabled 能够接受触摸或者点击事件
android:state_activated 被激活(这个麻烦举个例子,不是特明白)
android:state_window_focused 应用程序是否在前台,当有通知栏被拉下来或者一个对话框弹出的时候应用程序就不在前台了

注意:如果有多个item,那么程序将自动从上到下进行匹配,最先匹配的将得到应用。(不是通过最佳匹配)
如果一个item没有任何的状态说明,那么它将可以被任何一个状态匹配。

在activity里可以设置按钮的状态

mBtn_efax_received.setSelected(true);
mBtn_efax_failed.setSelected(false);
mBtn_efax_sent.setSelected(false);
mBtn_efax_recycle.setSelected(false);

设置小圆点消息数提示:

<ImageButton
                android:id="@+id/imgbtn_inbox"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true"
                android:layout_margin="2dp"
                android:background="@drawable/selector_efax_tab_inbox"
                />

            <TextView
                android:id="@+id/efax_main_textView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_marginRight="10dp"
                android:layout_alignParentTop="true"
                android:layout_marginTop="10dp"
                android:background="@drawable/indicator_xml"
                android:gravity="center_horizontal"
                android:text="88"
                android:textColor="@color/white"
                android:textIsSelectable="false"
                android:textSize="15sp"
                android:visibility="gone" />
        </RelativeLayout>

新建一个drable

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android= "http://schemas.android.com/apk/res/android"
    android:shape= "oval" 
    android:useLevel= "false" >
    <solid android:color= "#c6001d" /> 
    <stroke
        android:width= "1dp"
        android:color= "#c6001d" />
    <size android:width= "20dp"
          android:height= "20dp" /> 
</shape>

 参考:

http://www.oschina.net/question/920274_212245

相关推荐