開始前請先看看 這篇文章~
您是否有同樣的經驗,想點擊 Listview item 中的 Checkbox 時,卻常常意外點到整個 item,而造成預期外的動作? 嚴格來說這好像也不能怪開發者,誰叫預設的 Checkbox 就是那麼小,更不可能怪使用者說你手指怎麼那麼肥...。
但若想保有優良的使用者體驗,這個小細節是可以被解決的。處理的方法有很多種,比如放大 Checkbox 本身的 Drawable 或從 Layout 下手...但由於這樣做可能擠壓到其他的元件,再加上 Checkbox 本身的缺限,讓過程也有些麻煩。
因此我們可以考慮另一個方法,使用 TouchDelegate 來增加元件的觸控響應區域。
程式範例:
參考連結:
http://developer.android.com/reference/android/view/TouchDelegate.html
http://www.daggie.be/?p=1006
http://android.cyrilmottier.com/?p=574
您是否有同樣的經驗,想點擊 Listview item 中的 Checkbox 時,卻常常意外點到整個 item,而造成預期外的動作? 嚴格來說這好像也不能怪開發者,誰叫預設的 Checkbox 就是那麼小,更不可能怪使用者說你手指怎麼那麼肥...。
但若想保有優良的使用者體驗,這個小細節是可以被解決的。處理的方法有很多種,比如放大 Checkbox 本身的 Drawable 或從 Layout 下手...但由於這樣做可能擠壓到其他的元件,再加上 Checkbox 本身的缺限,讓過程也有些麻煩。
因此我們可以考慮另一個方法,使用 TouchDelegate 來增加元件的觸控響應區域。
程式範例:
final View parent = (View) delegate.getParent(); //delegate是想擴大觸控範圍的元件 parent.post( new Runnable() { public void run() { final Rect r = new Rect(); delegate.getHitRect(r); r.top -= 10; //觸控範圍往上增加 r.bottom += 10; //觸控範圍往下增加 r.left -= 10; //觸控範圍往左增加 r.right += 10; //觸控範圍往右增加 parent.setTouchDelegate( new TouchDelegate( r , delegate)); } });簡單來說就是透過父容器 setTouchDelegate,以調整觸控響應區域。這樣就不必動到元件本身或 Layout,一來讓元件維持小巧精美,二來又有足夠的響應區域。
參考連結:
http://developer.android.com/reference/android/view/TouchDelegate.html
http://www.daggie.be/?p=1006
http://android.cyrilmottier.com/?p=574
留言
張貼留言