close

Android按鈕狀態(Button State)

 
在Android中,drawable widget有很多種state,透過 xml 的 <selector>,也就是定義 StateList Drawable,能夠讓Android針對drawable(例如Button)的狀態,選擇要顯示的圖片。

本文會
  1. 舉例
  2. 列出state列表
 

例子


舉例來說,我想要一組這樣的按鈕

                 




分為上(btnUp)和下(btnDn)兩個按鈕,有兩個功能:

  • 提示使用者目前位置(上或下)
  • 切換上下頁

按鈕在平時(白色),按下時(邊框黃色),以及按下後(黃色)的圖各自不同。

因此,對任一個按鈕來說,需要有三個state:正常,按下,選擇(按下後)。
在Android的xml中,需要用<selector>配合<item>呈現三種state,對應的xml tag是

  • 按下 - state_pressed
  • 選擇 - state_selected
  • 正常 (不用特別定義)

!注意! Android會根據item的state一個一個往下找,一找到適合的state,便使用此state的drawable作顯示,因此<item>的順序非常重要。全部state定義可以在Developer Guide : StateList找到。例子的button state定義放在drawable/button_up.xml:

button_up.xml
<?xml version="1.0" encoding="utf-8"?><selectorxmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:state_pressed="true"android:drawable="@drawable/btn_up_pressed"/><itemandroid:state_selected="true"android:drawable="@drawable/btn_up_selected"/><itemandroid:drawable="@drawable/btn_up"/></selector>

button_dn.xml和buttun_up.xml一模一樣,只是將drawable改成btn_dn_xxx。

在activity中加入這組button:

main_activity.xml 
<LinearLayoutandroid:id="@+id/btn_layout"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"android:orientation="vertical"><Buttonandroid:id="@+id/btn_up"android:layout_width="80dp"android:layout_height="220dp"android:background="@drawable/situation_button_up"/><Viewandroid:layout_width="match_parent"android:layout_height="5dp"/><Buttonandroid:id="@+id/btn_dn"android:layout_width="80dp"android:layout_height="220dp"android:background="@drawable/situation_button_dn"/></LinearLayout>

使用這個button的java code:

MainActivity.java 
publicclassMainActivityextendsActivity{@Overrideprotectedvoid onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);finalButton btnUp =(Button) findViewById(R.id.btn_up);finalButton btnDn =(Button) findViewById(R.id.btn_dn);

        btnUp.setSelected(true);
        btnUp.setOnClickListener(newView.OnClickListener(){@Overridepublicvoid onClick(View v){
                btnUp.setSelected(true);
                btnDn.setSelected(false);// Do something}});
        btnDn.setOnClickListener(newView.OnClickListener(){@Overridepublicvoid onClick(View v){
                btnUp.setSelected(false);
                btnDn.setSelected(true);// Do something}});}}

State列表



Android Object State描述
android:state_pressed 物件被按下時
android:state_focused 物件由軌跡球或D-pad選取時
android:state_hovered 物件由指標覆蓋時
android:state_selected 物件被選取時
android:state_checkable 物件是checkable時(註1)
android:state_checked 物件被點選時
android:state_enabled 物件能夠接收touch/click event時
android:state_activated (API11以上)物件被持續選擇時
(例如highlight選上的list item)
android:state_window_focused 當物件所屬的application在前景時

(註1) 只有當這個物件能在checkable和non-checkable之間切換時才有效
 
出自:http://skypieah.blogspot.tw/2014/02/androidbutton-state.html
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 milly20423 的頭像
    milly20423

    millydream的部落格

    milly20423 發表在 痞客邦 留言(0) 人氣()