我們知道ViewGroup中的子類大部分有Layout這種布局,而View中的子類主要是各種控制項,當你在螢幕點擊的時候,它的事件處理是怎樣的呢?
onInterceptTouchEvent是ViewGroup中的方法,點擊螢幕後:
Activity------->onInterceptTouchEvent();
ViewGroup-------->onInterceptTouchEvent();
View---------------->onInterceptTouchEvent();
預設onInterceptTouchEvent()中返回的是false,這樣觸摸事件可以傳遞給下一層,如果設為true,則無法傳遞。
要把GridView中的ImageButton焦點給屏蔽,可以用上面的思想,把GridView看成是一個ViewGroup,具體代碼如下:
java代碼中:
public class MyGridView extends GridView {
public MyGridView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
public MyGridView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public MyGridView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
return true;
}
}
xml代碼中:
<com.example.filemanage.MyGridView
android:id="@+id/gridView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/Title"
android:layout_above="@+id/btnSel"
android:scrollbars="vertical"
android:numColumns="auto_fit"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"/>
最後需要在GridView的item xml檔案的布局中,加上一句android:descendantFocusability="blocksDescendants"
這樣就可以屏蔽ImageButon的響應。