Barra de desplazamiento a ViewGroup personalizado
Tengo la clase de CustomComponent
que extiende ViewGroup
.
Código fuente de CustomComponent
:
- Cómo obtener el índice de una vista particular (personalizada) de ViewGroup (FrameLayout) después de hacer onLongClick en la vista
- Android hacer la forma de diseño personalizado
- Programe agregar fragmentos a viewgroup
- Implementar Drag & Drop en pan de jengibre
- Prevención / captura "IllegalArgumentException: parámetro debe ser un descendente de esta vista" error
public class CustomComponent extends ViewGroup { private static final String LOGTAG = "CustomComponent"; private List<MenuItem> items; private Context context; private int screenWidth; private int screenHeight; private int cellWidth; private int cellHeight; private int duration; private int space=7; public CustomComponent(Context context) { super(context); this.context=context; } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { Log.v(LOGTAG, "on Measure called"); screenWidth = MeasureSpec.getSize(widthMeasureSpec); screenHeight = MeasureSpec.getSize(heightMeasureSpec); cellHeight=screenHeight/AppConstants.HEIDHTCELLSCOUNT; cellWidth=screenWidth/AppConstants.WIDTHCELLSCOUNT; duration= cellHeight*2; super.onMeasure(widthMeasureSpec, heightMeasureSpec+duration); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { Log.v(LOGTAG, "onLayout called"); int childCount = this.getChildCount(); for (int i = 0; i < childCount; i++) { View child = getChildAt(i); child.layout(items.get(i).getLeft(),items.get(i).getTop(),items.get(i).getRight(), items.get(i).getBottom()); } } public List<MenuItem> getItems() { return items; } public void setItems(List<MenuItem> items) { this.items = items; } }
Diseño de Xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:id="@+id/menu_layout" android:scrollbars="vertical"> <<package name>.CustomComponentandroid:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/menu_component" android:scrollbars="vertical" android:fadingEdge="vertical"/> </LinearLayout>
Necesito agregar scroll vertical a este ViewGroup
. Por favor ayuda, no tengo ni idea de cómo resolver este problema.
- Agregar vista al grupo de vistas xml existente en el código
- La animación de ViewGroup no funciona
- Evento de inflado de acabado de ViewGroup
- Stackoverflow error en la vista
- Android View y ViewGroup
- ¿Creación de una copia de una vista?
- ¿Cómo funciona una propiedad Animate Layout de ViewGroups?
- Construcción de un contenedor capaz de hacer zoom
Puede intentar incluir su MenuComponent
dentro de ScrollView
:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:id="@+id/menu_layout" android:scrollbars="vertical"> <ScrollView android:id="@+id/ScrollView1" android:layout_width="wrap_content" android:layout_height="wrap_content" > <<package name>.MenuComponent android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/menu_component" android:scrollbars="vertical" android:fadingEdge="vertical"/> </ScrollView> </LinearLayout>
Prueba esto. Necesitas un LinearLayout dentro de ScrollView. Coloque su MenuComponent dentro de LinearLayout. Deberia de funcionar.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:id="@+id/menu_layout" <ScrollView android:id="@+id/scrollView1" android:layout_width="fill_parent" android:layout_height="wrap_content" > <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" > <<package name>.MenuComponent android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/menu_component" android:scrollbars="vertical" android:fadingEdge="vertical"/> </LinearLayout> </ScrollView> </LinearLayout>
Tienes que llamar a awakenScrollBars()
, que activará las barras de desplazamiento para dibujar en tu viewGroup personalizado ( más detalles ) y la barra de desplazamiento vertical habilitada tiene que ser verdad setVerticalScrollBarEnabled()
También hay que anular las funciones computeVerticalScrollExtent()
y computeVerticalScrollRange
para establecer el tamaño del pulgar y el rango de desplazamiento de la barra de desplazamiento.