Reputation: 2972
I have CustomComponent
class which extends ViewGroup
.
Source code of 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;
}
}
Xml layout:
<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>
I need to add vertical scroll to this ViewGroup
.
Please help, I have no idea how to solve this problem.
Upvotes: 6
Views: 3887
Reputation: 1188
you have to call awakenScrollBars()
,which will trigger the scrollbars to draw on your custom viewGroup.(more details) and the vertical scrollbar enabled has to be true setVerticalScrollBarEnabled()
Also you have to override functions computeVerticalScrollExtent()
and computeVerticalScrollRange
to set thumb's size and scrollbar scroll range .
Upvotes: 0
Reputation: 13562
Try this. You need a LinearLayout inside a ScrollView. Put your MenuComponent inside the LinearLayout. It should work.
<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>
Upvotes: 3
Reputation: 1182
You could try to include your MenuComponent
inside a 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>
Upvotes: 1