SwipeStack icon indicating copy to clipboard operation
SwipeStack copied to clipboard

ViewPager inside adapter

Open panekzogen opened this issue 6 years ago • 2 comments

Hello.

I don't have a strong knowledge about view processing in android but maybe this helps someone because library seems unsupported. If someone want to create complex layout, in my case it was ViewPager inside adapter of swipe stack, note that the layout processing doing in wrong order: At SwipeStack.addNewView() which called on onLayout() for children nodes performing following:

bottomView.measure(measureSpecWidth | width, measureSpecHeight | height);
addViewInLayout(bottomView, 0, params, true);

But after several hours of reviewing android code and googling i found that right order is:

addView(bottomView, 0, params);
bottomView.measure(measureSpecWidth | width, measureSpecHeight | height);
bottomView.layout(0, 0, width, height);

If someone has deep knowledge about it and know on what exactly it affects, please explain. Hope that it helps someone.

panekzogen avatar Feb 09 '19 23:02 panekzogen

Second issue which i found: onMeasure override is not correct without measuring children

For measure all components onMeasure method should be overridden as follow

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int width = MeasureSpec.getSize(widthMeasureSpec);
        int height = MeasureSpec.getSize(heightMeasureSpec);
        setMeasuredDimension(width, height);

        int count = getChildCount();
        for (int i = 0; i < count; i++) {
            final View child = getChildAt(i);
            measureChild(child, widthMeasureSpec, heightMeasureSpec);
        }
    }

panekzogen avatar Mar 01 '19 21:03 panekzogen

Thank you for taking the time to post these fixes. It'll definitely help someone.

Johnett avatar Jul 10 '19 06:07 Johnett