padding方式
適合圖片等dp或px為單位的view,
不適合textview、button這種以或含sp計算單位的view。
TouchDelegate方式
有時候美工提供給我們的圖標是很小的,但卻要在如此小的圖標上附加點擊事件,如果不做處理,用戶在使用的時候是很難點中的。當然,我們可以通過布局做調整處理,但是往往是布局變得更復雜?,F在我們通過TouchDelegate來擴大View點擊區域方式解決這個問題。
作用
假設有兩個View,分別是v1、v2,可以通過v1.setTouchDelegate(new TouchDelegate(bounds, v2))來委派觸摸事件,其中bounds是一個Rect。執行該這個方法后,v1中bounds區域的觸摸事件TouchEvent將會傳遞給v2。
代碼
public static void setTouchDelegate(final View view, final int expandTouchWidth) {
final View parentView = (View) view.getParent();
parentView.post(new Runnable() {
@Override
public void run() {
final Rect rect = new Rect();
view.getHitRect(rect); // view構建完成后才能獲取,所以放在post中執行
// 4個方向增加矩形區域
rect.top -= expandTouchWidth;
rect.bottom += expandTouchWidth;
rect.left -= expandTouchWidth;
rect.right += expandTouchWidth;
parentView.setTouchDelegate(new TouchDelegate(rect, view));
}
});
}
使用的時候只需在onCreate中或其他合適的地方調用setTouchDelegate(v2, 100),v2是要擴大點擊區域的view,100是v2四周要擴大的點擊區域px值。
注意點
- 必須保證parent足夠大,如果自定義的范圍超出parent的大小,則超出的那部分無效。
- 一個parent只能設置一個觸摸委派,設置多個時,只有最后設置的child有效。如果希望一個view能設置多個委派,需要再自定義parent
參考
利用TouchDelegate擴大View點擊區域
ListView Tips & Tricks #5: Enlarged Touchable Areas