Barra de desplazamiento a ViewGroup personalizado

Tengo la clase de CustomComponent que extiende ViewGroup .

Código fuente de CustomComponent :

  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. Introduzca aquí la descripción de la imagen

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.

  • Android ViewGroup.setScaleX () hace que la vista se recorte
  • Generando un LayoutParams basado en el tipo de padre
  • Nueve parches en un grupo de vistas personalizado
  • Uso de dispatchDraw (Lienzo lienzo)
  • ¿Por qué ir para el diseño de restricciones ya que ya tenemos Disposición relativa?
  • Android StackOverflowError en ViewGroup.resetResolvedTextDirection
  • RemoveView no funciona después de LayoutInflater.inflate (resource, root, true)
  • Android - efecto de deformación de imagen
  • Android: obtener Viewgroup de la vista?
  • Agregar y eliminar un TextView dinámicamente en Android
  • Android en la vista eliminado de los padres
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.