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 - Ocultar vistas
  • Android ViewGroup.setScaleX () hace que la vista se recorte
  • RemoveView no funciona después de LayoutInflater.inflate (resource, root, true)
  • Establecer GestureDetector en todas las vistas de niños
  • Android en la vista eliminado de los padres
  • Cómo obtener el índice de una vista particular (personalizada) de ViewGroup (FrameLayout) después de hacer onLongClick en la vista
  • Android - efecto de deformación de imagen
  • Cómo crear un grupo de vistas personalizado en android con el ejemplo
  • Android ViewGroup crash: Intenta leer desde el campo 'int android.view.View.mViewFlags' en una referencia de objeto nulo
  • Diferencia entre View y ViewGroup en Android
  • Cómo crear un botón que contiene varias vistas?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.