¿Cómo cambiar la altura de ListView de forma dinámica en Android?
Necesito cambiar la altura de un ListView dinámicamente en mi aplicación.
¿Hay alguna forma de hacer eso?
- Cómo controlar el número de vista previa de ListView en Android Studio
- Viewpager no se desplaza en el diseño del coordinador
- Limitar el número de filas de listview
- Cómo pasar varios valores de matriz en una clase Adaptador personalizado para Vista de lista personalizada?
- android usando setlistadapter () sin extender listactivity
- ListView setOnItemClickListener no funciona agregando botón
- ListView con OnItemClickListener android
- Android ListView: detecta si los datos de ListView se ajustan a la pantalla sin desplazarse
- Preseleccionar elementos en listView Android
- Uso del selector de un diseño para cambiar las propiedades de su hijo
- ListView: ¿Cómo espero hasta que esté cargado?
- SetOnItemClickListener en ListView que amplía la actividad
- añadir elementos en la parte superior de la vista de lista android
Para cambiar la altura y el ancho dinámicamente, intente esto
RelativeLayout.LayoutParams mParam = new RelativeLayout.LayoutParams((int)(width),(int)(height); listView.setLayoutParams(mParam);
También puede usar LayoutParams.FILL_PARENT o LayoutParams.WRAP_CONTENT en lugar de height & width
Este pedazo de código me ayudó a alcanzar la altura dinámica del listview.
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, utilice 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 aquí
Puede utilizar el método siguiente para establecer la altura de listview de forma programática según sus elementos:
<ListView android:id="@+id/lvMenu" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffff" />
Método utilizado para establecer la altura de listview:
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; } }
A continuación, establezca como abajo código:
MenuAdapter menuAdapter = new MenuAdapter(context, R.layout.menu_item); lvMenu.setAdapter(menuAdapter); setListViewHeightBasedOnItems(lvMenu);
Espero que te ayude.
Use listview personalizado y dé la altura como wrap_content.
- Cómo cambiar el color del texto de la barra de acción sherlock
- Sincronizar / actualizar bases de datos sqlite