Android - 動態調整ListView高度

來源:互聯網
上載者:User

標籤:

布局中,如果設計ListView的高度為包裹內容,那麼ListView的高度是隨著它的子條目的數量的變化而改變的,

這就可能會導致ListView下面的一些控制項的位置也會隨著ListView的高度的變化而變化。

項目中可能會碰到需要動態調整或控制ListView的高度的情況,下面就分享一下我自己使用的一種辦法。

 

我遇到的問題:

ListView下面有一個Button,如果ListView子條目的數量較少,Button可以正常顯示在螢幕上,但如果ListView子條目的數量較多時,Button就會被擠出螢幕

因為考慮效果(Button要緊跟著ListView),所以不能把ListView的高度寫死,所以要使用包裹內容,

那麼問題就是要解決Button的顯示,保證Button不被擠出螢幕

 

設計思路:

ListView子條目數量少時,下面緊跟著Button,

ListView子條目多時,Button顯示在螢幕底部,ListView的高度固定到Button上方

 

解決思路:

1、先計算出固定不變的控制項的高度(螢幕中有些控制項的大小是不需要改變的),基本就是除了ListView以外的控制項(還要考慮是否需要計算狀態列的高度)

2、擷取螢幕的高度

3、用螢幕高度 減掉 固定不變的高度 得到ListView的最大允許高度

4、計算ListView每個子條目的高度並累加,得到ListView的真實高度

5、判斷真實高度和最大允許高度的差值,如果真實高度超出了最大允許高度,就把ListView的高度設定為最大允許高度,否則就不需要處理

 

代碼:

/**
  * 測量控制項高度的方法:
  * @param view 需要測量的控制項
  * @return 測量到的高度
  */

public int mesHeight(View view) {
  int width = View.MeasureSpec.makeMeasureSpec(0,
    View.MeasureSpec.UNSPECIFIED);
  int height = View.MeasureSpec.makeMeasureSpec(0,
    View.MeasureSpec.UNSPECIFIED);
  view.measure(width, height);
  return view.getMeasuredHeight();
 }

 

step1:

// 固定不變的高度自己想辦法計算吧,情況不同,計算方法也不同

// 提供一些資訊:有固定值的直接累加,另外如果有margintop和marginbottom屬性的也要加上,沒有有固定值的使用上面的方法計算

// 如果需要計算狀態列高度的,也可以在網上搜尋一下,應該有很多

step2:

// 擷取螢幕高度

int screenHeight = getWindowManager().getDefaultDisplay().getHeight();

step3:

screenHeight 減掉 你計算的固定高度

step4:

// ListView子條目的高度也需要自己計算,情況不同方法不同,但思路和上面的固定高度的演算法思路一樣

step5:

// 當前listview的總高度

int currentHeight = 0;  :
  for (int i = 0; i < lv.size(); i++) {
   currentHeight += item;
  }

if (currentHeight > maxHeight) {
   LayoutParams param = new LayoutParams(LayoutParams.FILL_PARENT,
     maxHeight);
   lv.setLayoutParams(param);
   lv.setPadding(0,0, 0,0);//看個人情況
   lv_classes.setDivider(null);//看個人情況
  }

 

方法中代碼不完整,主要是因為每個項目中的布局都是不一樣的,所以無法給出一個準確的計算方法,但提供的思路希望能起到協助。

 

Android - 動態調整ListView高度

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.