3 回答

TA貢獻1805條經驗 獲得超9個贊
除了固有的滾動之外,GridView絕對有很多好處。例如,一致,動態的單元格布局將根據您傳遞到其中的數據進行擴展和收縮。因此,當人們說想要這樣的功能不好時,我認為這是錯誤的,因為您可能希望將動態圖像網格(視圖)放在滾動視圖中,但希望整個滾動視圖包含除網格之外的其他內容細胞。
現在,這是您可以執行的操作。在這里檢查答案。它是一個可擴展的高度GridView,您將要在項目中導入/創建它?;旧?,這意味著隨著向GridView中添加更多項,它只會擴展其高度,而不是保持其高度設置并使用滾動。這正是您想要的。
在項目中擁有ExpandableHeightGridView之后,轉到您想要GridView放置的XML布局。然后,您可以執行以下操作(解釋):
<ScrollView ...>
<RelativeLayout ...>
<com.example.ExpandableHeightGridView ... />
<other view items />
</RelativeLayout>
</ScrollView>
然后,在您設置GridView適配器的活動中,您要確保將其設置為可擴展。所以:
ExpandableHeightGridView gridView = (ExpandableHeightGridView) findViewById(R.id.myId);
gridView.setAdapter(yourAdapter);
gridView.setExpanded(true);
您需要此可擴展GridView的原因是,標準GridView不能擴展是導致滾動的原因。它會堅持到一定的高度,然后隨著更多的項目超出其視圖范圍,它將變得可滾動?,F在,有了這個,您的GridView將始終擴大其高度以適合其中的內容,從而從不允許它進入其滾動模式。這使您可以在ScrollView中使用它,并在ScrollView中使用它之上或之下的其他視圖元素,并使它們全部滾動。
這應該為您提供所需的結果。如果您有任何疑問,請告訴我。

TA貢獻1900條經驗 獲得超5個贊
我知道我來晚了,但是我有另一個解決方案,我必須分享并且可以完美地工作。在此,該方法根據其包含的項數來計算GridView的高度,并在運行時將其設置為GridView的高度。
public void setGridViewHeightBasedOnChildren(GridView gridView, int columns) {
ListAdapter listAdapter = gridView.getAdapter();
if (listAdapter == null) {
// pre-condition
return;
}
int totalHeight = 0;
int items = listAdapter.getCount();
int rows = 0;
View listItem = listAdapter.getView(0, null, gridView);
listItem.measure(0, 0);
totalHeight = listItem.getMeasuredHeight();
float x = 1;
if( items > columns ){
x = items/columns;
rows = (int) (x + 1);
totalHeight *= rows;
}
ViewGroup.LayoutParams params = gridView.getLayoutParams();
params.height = totalHeight;
gridView.setLayoutParams(params);
}
調用setAdaptergridview之后,只需調用
setGridViewHeightBasedOnChildren( <yourGridView> , <no of grid view columns> )
它會工作。
您可以像平常一樣在xml中定義gridview
并讓代碼來處理它。:)
- 3 回答
- 0 關注
- 569 瀏覽
添加回答
舉報