2011-05-20 37 views

Respuesta

7

para la altura y anchura de cambio de forma dinámica así, probar este

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

también se puede utilizar LayoutParams.FILL_PARENT o LayoutParams.WRAP_CONTENT vez de la altura & ancho

+3

la solución hereover me da un error de conversión, cambiar a LinearLayout funciona muy bien. LinearLayout.LayoutParams mParam = new LinearLayout.LayoutParams (LinearLayout.LayoutParams.MATCH_PARENT, myList.size() * 100); \t \t listViewPhone.setLayoutParams (mParam); –

+0

@ Dr.Luiji Tengo usando algo como esto 'RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams (ViewGroup.LayoutParams.WRAP_CONTENT, item.getRoutes(). Size() * 200);'. Pero no puedo ver algún elemento de la lista. Cualquier sugerencia, quiero mostrar todo el elemento de lista de la lista. Que puedo hacer ? –

-1

uso vista de lista personalizada y darle altura que wrap_content.

22

Este fragmento de código me ayudó a lograr la altura dinámica de la vista de lista.

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(); 
    } 
} 

En la Actividad principal, use esta clase de Utilidad para cambiar la altura de la vista de lista.

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

Tomado de here

+0

¡¡Funciona, una pieza increíble de código !!!!!!!!!! –

+0

Perfección simplificada. Gracias –

+0

Gracias, esto funcionó para mí también. En realidad estoy usando Listview dentro de scrollview en una gran forma. Es por eso que tengo que usar este código. Otro wrap wrap content en la propiedad listview height funciona mejor. De todos modos buena utilidad, buen trabajo :) –

7

Puede utilizar a continuación el método para ajustar la altura de vista de lista mediante programación según sus artículos:

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

Método utilizado para el ajuste de altura de vista de lista:

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; 
     } 

    } 

Luego configúrelo como sigue código:

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

Espero que te ayude.

+0

¿Por qué multiplicaste con 500? ¿Cuál es el motivo para hacer "float px = 500 * (listView.getResources(). GetDisplayMetrics(). Density);" ?? –

Cuestiones relacionadas