android - 在android中的Scrollview中设置Viewpager高度

标签 android android-viewpager android-scrollview

我必须在 ScrollView 中显示一个 viewpager(寻呼机行中图像下方的图像和文本)。我正在从网络下载图像、文本并在寻呼机行中显示。我将 viewpager 包装在 srollview 中以支持横向模式。

 <com.xxx.myapp.android.ui.CustomScrollView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:fadingEdge="none"
    android:fillViewport="true"
    android:gravity="center">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:descendantFocusability="blocksDescendants"
        android:orientation="vertical" >

        <android.support.v4.view.ViewPager
            android:id="@+id/viewPager"
            android:layout_width="match_parent"
            android:layout_height="800dp"
            android:layout_gravity="top"
            android:layout_marginTop="10dp" />  
    </LinearLayout>
</com.xxx.myapp.android.ui.CustomScrollView> 

这里是 CustomScrollView .问题是如何根据其子高度设置 View 寻呼机高度,以便我可以滚动屏幕直到 View 寻呼机项目结束。如果我将 View 寻呼机高度设置为 wrapcontent,则 viewpager 中不会显示任何内容。如果我设置一些 800dp,那么我可以看到寻呼机项目,但屏幕上没有不必要的滚动。我不希望我的 ScrollView 滚动到寻呼机 child 的高度之外。请帮我。

最佳答案

要固定 viewpager 的高度,我们可以自定义 viewpager 类。

public class WrapContentViewPager extends ViewPager {

private int mCurrentPagePosition = 0;

public WrapContentViewPager(Context context) {
    super(context);
}

public WrapContentViewPager(Context context, AttributeSet attrs) {
    super(context, attrs);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    try {
        View child = getChildAt(mCurrentPagePosition);
        if (child != null) {
            child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
            int h = child.getMeasuredHeight();
            heightMeasureSpec = MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

public void reMeasureCurrentPage(int position) {
    mCurrentPagePosition = position;
    requestLayout();
}
}

应该在 viewpager 的 onPageSelected 回调中调用此 reMeasureCurrentPage。CustomScrollView 是父 View 。

关于android - 在android中的Scrollview中设置Viewpager高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20000018/

相关文章:

java - 尽管添加到 View 中, fragment 仍未显示

android - Flutter Firebase Messaging 无法创建服务 io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService

Android SimpleOnPageChangeListener - 确定滑动方向

android - ScrollView如何滚动到想要的位置?

android - 如果 subview 返回 false,则让父 View 承担 MotionEvents

android - 在 android ScrollView 上显示更大的标尺

android - 为什么我的服务在 Bootup 期间没有启动?

Android 显示 "Unable to get system library for project"

android - ViewPager2 异常 : java. lang.IllegalStateException:违反了设计假设

android - ViewPager 从错误的地方开始?