亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將GridView放入ScrollView

如何將GridView放入ScrollView

米琪卡哇伊 2019-11-27 14:25:24
我必須設計布局以使整個布局都可以滾動,而內部布局則必須以Grid表格形式顯示相關內容,因此我決定使用GridView。但是問題是我無法在GridView內部使用ScrollView我已經閱讀了文檔(文檔也說我們應該也不要GridView在內部使用ScrollView)。但是我必須這樣做,所以可以給我一些想法。謝謝
查看完整描述

3 回答

?
Cats萌萌

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中使用它之上或之下的其他視圖元素,并使它們全部滾動。


這應該為您提供所需的結果。如果您有任何疑問,請告訴我。


查看完整回答
反對 回復 2019-11-27
?
梵蒂岡之花

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


并讓代碼來處理它。:)


查看完整回答
反對 回復 2019-11-27
  • 3 回答
  • 0 關注
  • 569 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號