通常情況下,我們使用GridView來完成類似表格的布局,這種布局,我們只需要設置列數,會自動根據適配器的數據進行適配,非常靈活.
GridView其實就是一個容器.允許向其內部添加控件,通常情況下,其內部類似一個ScrollView.是可以上下滑動的,很好的做到了屏幕適配.但是在有些情況下.我們需要GridView內部是不可以滑動的,在API中是沒有這一項的,想簡單又快速的實現,到底有沒有什么好方法呢?
答案是有點.下面我們通過三種方式來實現這種需求:
①最簡單的實現方式:
gridView_sort.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return MotionEvent.ACTION_MOVE == event.getAction() ? true : false; } });
②自定義View的實現方式
重寫dispatchTouchEvent
@Override public boolean dispatchTouchEvent(MotionEvent ev) { if(ev.getAction() == MotionEvent.ACTION_MOVE) { return true; } return super.dispatchTouchEvent(ev); }
同時,這種方式指示禁止了GridView的上下滑動問題,並沒有從根本上解決問題,因為GridView是有高度的,這樣其實還是可以看到GridView類似ScrollView可以上下滑動的影子,於是,我們想到了另一種方式,那就是設置GridView 的高度,
艱難的折騰之路開始了,斷點嘗試了多次,也沒有得到GridView 的高度.后來追蹤一下發現,GrivdView的高度值只有在Adatpter的getView 才會有值 ,並且前幾次調用時還沒有,后面才有的。
public View getView(int position, View convertView, ViewGroup parent) { convertView = LayoutInflater.from(context).inflate(R.layout.item, null); AbsListView.LayoutParams param = new AbsListView.LayoutParams( android.view.ViewGroup.LayoutParams.FILL_PARENT, mGv.getHeight()/ROW_NUMBER);