2011-05-20 22 views

回答

7

變革的高度和寬度,動態等等,試試這個

RelativeLayout.LayoutParams mParam = new RelativeLayout.LayoutParams((int)(width),(int)(height); 
     listView.setLayoutParams(mParam); 

你也可以使用LayoutParams.FILL_PARENT或LayoutParams.WRAP_CONTENT,而不是高度&寬度

+3

overover解決方案給我一個鑄造錯誤,改爲LinearLayout的作品很棒。 LinearLayout.LayoutParams mParam = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,myList.size()* 100);其中,LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,myList.size() \t \t listViewPhone.setLayoutParams(mParam); – 2013-02-22 15:04:11

+0

@ Dr.Luiji我已經使用類似這樣的'RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, item.getRoutes()。size()* 200);'。但是我無法從列表中看到一些項目。任何建議,我想顯示列表的整個列表項。我能做什麼 ? – 2016-10-20 09:32:41

-1

使用自定義列表視圖,並給予高度WRAP_CONTENT。

22

這段代碼幫助我實現了動態列表視圖高度。

import android.view.View; 
import android.view.ViewGroup; 
import android.view.View.MeasureSpec; 
import android.widget.ListAdapter; 
import android.widget.ListView; 

public class Utility { 
    public static void setListViewHeightBasedOnChildren(ListView listView) { 
     ListAdapter listAdapter = listView.getAdapter(); 
     if (listAdapter == null) { 
      // pre-condition 
      return; 
     } 

     int totalHeight = 0; 
     int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.AT_MOST); 
     for (int i = 0; i < listAdapter.getCount(); i++) { 
      View listItem = listAdapter.getView(i, null, listView); 
      listItem.measure(desiredWidth, MeasureSpec.UNSPECIFIED); 
      totalHeight += listItem.getMeasuredHeight(); 
     } 

     ViewGroup.LayoutParams params = listView.getLayoutParams(); 
     params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); 
     listView.setLayoutParams(params); 
     listView.requestLayout(); 
    } 
} 

在主Activity中,使用此工具類來更改列表視圖的高度。

phraseListView=(ListView)findViewById(R.id.phrase_listview); 
phraseAdapter=new PhraseListAdapter(this); 
phraseListView.setAdapter(phraseAdapter); 
Utility.setListViewHeightBasedOnChildren(phraseListView); 

here

+0

它的工作原理,很棒的一段代碼!!!!!!!!!! – 2015-04-21 09:40:22

+0

完美簡化。謝謝 – 2016-11-15 20:08:56

+0

謝謝,這也適用於我。其實我在一個大窗體中使用滾動視圖內的ListView。這就是爲什麼我必須使用此代碼其他wrap wrap_content值在listview高度屬性效果最好。反正好用的好工作:) – 2017-05-05 12:25:14

7

兩者可以使用下面的方法以編程方式設置列表視圖的高度,按您的項目:

public static boolean setListViewHeightBasedOnItems(ListView listView) { 

     ListAdapter listAdapter = listView.getAdapter(); 
     if (listAdapter != null) { 

      int numberOfItems = listAdapter.getCount(); 

      // Get total height of all items. 
      int totalItemsHeight = 0; 
      for (int itemPos = 0; itemPos < numberOfItems; itemPos++) { 
       View item = listAdapter.getView(itemPos, null, listView); 
       float px = 500 * (listView.getResources().getDisplayMetrics().density); 
       item.measure(View.MeasureSpec.makeMeasureSpec((int)px, View.MeasureSpec.AT_MOST), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); 
       totalItemsHeight += item.getMeasuredHeight(); 
      } 

      // Get total height of all item dividers. 
      int totalDividersHeight = listView.getDividerHeight() * 
        (numberOfItems - 1); 
      // Get padding 
      int totalPadding = listView.getPaddingTop() + listView.getPaddingBottom(); 

      // Set list height. 
      ViewGroup.LayoutParams params = listView.getLayoutParams(); 
      params.height = totalItemsHeight + totalDividersHeight + totalPadding; 
      listView.setLayoutParams(params); 
      listView.requestLayout(); 
      return true; 

     } else { 
      return false; 
     } 

    } 
:用於設置列表視圖的高度

<ListView 
     android:id="@+id/lvMenu" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="#ffffff" 
     /> 

方法

然後設置它像下面的代碼:

MenuAdapter menuAdapter = new MenuAdapter(context, R.layout.menu_item); 
      lvMenu.setAdapter(menuAdapter); 
      setListViewHeightBasedOnItems(lvMenu); 

希望它能幫助你。

+0

你爲什麼乘以500?什麼原因做「float px = 500 *(listView.getResources()。getDisplayMetrics()。density);」 ?? – 2018-02-07 11:55:16