studio setheight match_parent linearlayout layout_width change and java android xml height

java - setheight - set width and height programmatically android



¿Cómo establecer una altura máxima con contenido de envoltura en Android? (5)

En Android, ¿cómo se puede crear una vista de desplazamiento que tenga una altura máxima y ajuste de contenido?

Lo intenté

<ScrollView android:id="@+id/scrollView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:maxHeight="200dp" android:layout_alignParentBottom="true" > <LinearLayout android:id="@+id/maincontainer" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> </LinearLayout> </ScrollView>

Pero esto no está funcionando?


Aquí puede establecer la altura de su Scrollview de esta manera:

<ScrollView android:id="@+id/scrollView1" android:layout_width="match_parent" android:layout_height="200dp" android:layout_alignParentBottom="true" > <LinearLayout android:id="@+id/maincontainer" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> </LinearLayout> </ScrollView>



Puedes hacerlo programáticamente.

private static class OnViewGlobalLayoutListener implements ViewTreeObserver.OnGlobalLayoutListener { private final static int maxHeight = 130; private View view; public OnViewGlobalLayoutListener(View view) { this.view = view; } @Override public void onGlobalLayout() { if (view.getHeight() > maxHeight) view.getLayoutParams().height = maxHeight; } }

Y agregar oyente a la vista:

view.getViewTreeObserver() .addOnGlobalLayoutListener(new OnViewGlobalLayoutListener(view));

El oyente llamará al método onGlobalLayout (), cuando se cambiará la altura de la vista.


para establecer la altura de la vista de desplazamiento, debe utilizar 2 linerlayout juntos en conjunto y luego configurar la vista de control como elemento secundario y luego configurar el diseño de la salida de línea del medio: altura para limitar la altura de la vista de desplazamiento.


puede agregar esto a cualquier vista (anular onMeasure en una clase heredada de una vista)

@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (maxHeight > 0){ int hSize = MeasureSpec.getSize(heightMeasureSpec); int hMode = MeasureSpec.getMode(heightMeasureSpec); switch (hMode){ case MeasureSpec.AT_MOST: heightMeasureSpec = MeasureSpec.makeMeasureSpec(Math.min(hSize, maxHeight), MeasureSpec.AT_MOST); break; case MeasureSpec.UNSPECIFIED: heightMeasureSpec = MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.AT_MOST); break; case MeasureSpec.EXACTLY: heightMeasureSpec = MeasureSpec.makeMeasureSpec(Math.min(hSize, maxHeight), MeasureSpec.EXACTLY); break; } } super.onMeasure(widthMeasureSpec, heightMeasureSpec); }