Listview la misma altura que el contenido
He utilizado listview personalizado. El contenido viene de dinámico Quiero a la misma altura de vista de lista igual que el contenido.
He utilizado wrap_content pero esto no ayuda Si elimino scrollview entonces su trabajo
- Actualizar fragmento actual (datos ListView) que permanece en la misma actividad
- Actualización de datos de Json analizados en Listview
- Android obtiene texto de todas las casillas marcadas en listView
- Android anima todos los elementos de vista de lista simultáneamente
- El clic de Listitem no funciona con las casillas de verificación Android
Código. "El desplazamiento vertical ScrollView no debe contener otro widget de desplazamiento vertical (ListView)"
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/background_img" android:scrollbars="none" > <LinearLayout android:layout_width="match_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ListView android:id="@+id/lstsemtrack" android:layout_width="fill_parent" android:layout_height="wrap_content" android:divider="#f2e4e4" android:dividerHeight="1dip" > </ListView>
Lista de articulos
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="10dip" android:scrollbars="none" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:weightSum="4" > <TextView android:id="@+id/txtBiology" style="@style/sem_rowtext" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginRight="5dip" android:layout_weight="1" android:text="Biology" /> <TextView android:id="@+id/txtClass" style="@style/sem_rowtext" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:text="Biology - 101" /> <TextView android:id="@+id/txtGrade" style="@style/sem_rowtext" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:text="Grade" /> <TextView android:id="@+id/txtGrade" style="@style/sem_rowtext" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:text="Remove" /> </LinearLayout> </LinearLayout>
Salida como abajo quiero igual que el contenido no scrollview
- Android ListView: Cómo agregar una fila con un botón
- Selector personalizado para el fondo de la lista
- Cómo hacer las imágenes más grandes (en altura) en la lista perezosa
- Botones de acción flotante desaparecen en el desplazamiento
- Android - ListView diapositiva izquierda / derecha como Samsung contacto ListView
- Android restore instance state de un fragmento que está en backstack
- Fragmento onCreate llamado varias veces cuando vuelve a cargar el Fragmento
- Cómo reemplazar completamente listView / GridView con RecyclerView?
Utilice este código
public class MyListView extends ListView { public MyListView (Context context, AttributeSet attrs) { super(context, attrs); } public MyListView (Context context) { super(context); } public MyListView (Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } }
No debería poner un ListView dentro de ScrollView porque ListView es un grupo de vistas que muestra una lista de elementos desplazables. Si lo usa dentro de scrollview no recibirá eventos de desplazamiento porque todos ellos son manejados por el ScrollView padre. El uso de un ListView para que no sea scroll es extremadamente caro y va en contra de todo el propósito de ListView. Usted NO debe hacer esto. Simplemente utilice un LinearLayout en su lugar.
Sin embargo, si realmente quieres hacer esto puedes echar un vistazo a esto: ¿Cómo puedo poner un ListView en un ScrollView sin colapsar?
En el diseño padre, establezca la altura en wrap_content
. Esto debería funcionar.
Otras sugerencias no funcionarán, ya que no hay forma de determinar la altura del contenido del ListView hasta que se dibuje en la pantalla (a menos que tenga una altura fija, a continuación, utilice eso como la altura de ListView).
Lo que puedes hacer es establecer la altura de ListView después de dibujar los elementos dentro de él. Puede hacerlo en onWindowFocusChanged
en su actividad. Como ejemplo:
public void onWindowFocusChanged(boolean hasFocus) { // get content height int contentHeight = listView.getChildAt(0).getHeight(); // set listview height LayoutParams lp = listView.getLayoutParams(); lp.height = contentHeight; listView.setLayoutParams(lp); }
Usar android: layout_height = "match_parent", funcionará creo.
Intente encajar la vista de lista con un LinearLayout y establezca la altura de LinearLayout en wrap_content.
Utilizar Own ListView personalizado
Cree una clase CustomListView.java y extienda ListView así.
public class CustomListView extends ListView { private android.view.ViewGroup.LayoutParams params; private int prevCount = 0; public CustomListView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onDraw(Canvas canvas) { if (getCount() != prevCount) { int height = getChildAt(0).getHeight() + 1 ; prevCount = getCount(); params = getLayoutParams(); params.height = getCount() * height; setLayoutParams(params); } super.onDraw(canvas); } }
Luego usarlo en xml
<yourPackageName.CustomListView android:id="@+id/lstsemtrack" android:layout_width="fill_parent" android:layout_height="wrap_content" android:divider="#f2e4e4" android:dividerHeight="1dip"> </yourPackageName.ListView>
- Widget de la pestaña siempre en los alfabetos de mayúsculas en Android 4.0
- Ciclo de vida de la actividad de Android después de presionar el botón Atrás