close
Android按鈕狀態(Button State)
在Android中,drawable widget有很多種state,透過 xml 的 <selector>,也就是定義 StateList Drawable,能夠讓Android針對drawable(例如Button)的狀態,選擇要顯示的圖片。
本文會
舉例來說,我想要一組這樣的按鈕
分為上(btnUp)和下(btnDn)兩個按鈕,有兩個功能:
按鈕在平時(白色),按下時(邊框黃色),以及按下後(黃色)的圖各自不同。
因此,對任一個按鈕來說,需要有三個state:正常,按下,選擇(按下後)。
在Android的xml中,需要用<selector>配合<item>呈現三種state,對應的xml tag是
!注意! Android會根據item的state一個一個往下找,一找到適合的state,便使用此state的drawable作顯示,因此<item>的順序非常重要。全部state定義可以在Developer Guide : StateList找到。例子的button state定義放在drawable/button_up.xml:
button_up.xml
button_dn.xml和buttun_up.xml一模一樣,只是將drawable改成btn_dn_xxx。
在activity中加入這組button:
main_activity.xml
使用這個button的java code:
MainActivity.java
(註1) 只有當這個物件能在checkable和non-checkable之間切換時才有效
本文會
例子
舉例來說,我想要一組這樣的按鈕
分為上(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
全站熱搜
留言列表