利用TouchDelegate設定元件的觸控區域

開始前請先看看這篇文章~

您是否有同樣的經驗,想點擊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

這個網誌中的熱門文章

Android Studio 如何調整字型大小

Android Studio 無法在實機上 Run/Debug 程式?

App在Google Play被停權與恢復的經驗分享