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>
He extendido ScrollView y he agregado código para implementar esta característica:
https://gist.github.com/JMPergar/439aaa3249fa184c7c0c
Espero que sea de utilidad.
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);
}