android 在ScrollView中嵌入GridView
做android程式開發的都知道,不能在一個擁有Scrollbar的組件中嵌入另一個擁有Scrollbar的組件,因為這不科學,會混淆滑動事件,導致只顯示一到兩行資料。那麼就換一種思路,首先讓子控制項的內容全部顯示出來,禁用了它的滾動。如果超過了父控制項的範圍則顯示父控制項的scrollbar滾動顯示內容,思路是這樣,一下是代碼。
具體的方法是自訂GridView組件,繼承自GridView。重載onMeasure方法:
- public class MyGridView extends GridView
- {
- public MyGridView(android.content.Context context,
- android.util.AttributeSet attrs)
- {
- super(context, attrs);
- }
-
- /**
- * 設定不滾動
- */
- public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
- {
- int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
- MeasureSpec.AT_MOST);
- super.onMeasure(widthMeasureSpec, expandSpec);
-
- }
-
- }
public class MyGridView extends GridView{public MyGridView(android.content.Context context,android.util.AttributeSet attrs){super(context, attrs);}/** * 設定不滾動 */public void onMeasure(int widthMeasureSpec, int heightMeasureSpec){int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,MeasureSpec.AT_MOST);super.onMeasure(widthMeasureSpec, expandSpec);}}
其中onMeasure函數決定了組件顯示的高度與寬度;
makeMeasureSpec函數中第一個函數決定布局空間的大小,第二個參數是配置模式
MeasureSpec.AT_MOST的意思就是子控制項需要多大的控制項就擴充到多大的空間
之後在ScrollView中添加這個組件就OK了,同樣的道理,ListView也適用。