2011-05-20 60 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