可滚动的 PagerAdapter

Scrollable PagerAdapter

我做了一个PagerAdapter,效果很好,但是当我把我的phone水平放置时,很多像TextView这样的东西是不可见的,因为它们是"below" phone的画面。我知道我可以输入 ScrollView,但是这个选项会产生很多错误。

除了 ScrollView 之外还有其他选项吗?或者错误是什么意思?

这是我的 LinearLayout 代码,没有任何错误,但 PagerAdapter 不可滚动。

Java代码:

public class SlideAdapter_info extends PagerAdapter {
    Context context;
    LayoutInflater inflater;

    public SlideAdapter_info(Context context){
        this.context = context;
    }

    @Override
    public int getCount() {
        return 1;
    }

    @Override
        public boolean isViewFromObject(View view, Object object) {
        return (view==(LinearLayout)object);
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object{
        container.removeView((LinearLayout)object);
    }

    @NonNull
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        inflater = (LayoutInflater) 
        context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(R.layout.slide_info, container, false);
        //other code to set the textviews and the imageview
        container.addView(view);
        return view;
    }
}

xml代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/slidelinear_info"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:gravity="center"
     android:orientation="vertical">

<TextView /> ....

<!-- This allows me to have a circle shaped image-->
<de.hdodenhof.circleimageview.CircleImageView 
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/slideimg"
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:paddingTop="10dp"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    app:civ_border_color="@color/black"
    app:civ_border_width="3dp" />

    <TextView /> ....

    </LinearLayout>

这是结果:(水平)

这是结果:(垂直)

如果我输入 ScrollView 而不是 LinearLayoutAndroid Studio 会给我这个错误:

java.lang.IllegalStateException: ScrollView can host only one direct child

at esame.progetto.xhondar.github.com.info.SlideAdapter_info.instantiateItem(SlideAdapter_info.java:87)

这是一行: View view = inflater.inflate(R.layout.slide_info, container, false);

java.lang.IllegalStateException: ScrollView can host only one direct child 准确地告诉您您的问题所在。只需将您的 LinearLayout 转换为 ScrollView,您就有多个 children。如果您希望当前布局在 ViewPager 中可滚动,则需要在布局 xml 文件中用 ScrollView 包裹 LinearLayout

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 android:layout_width="match_parent"
 android:layout_height="match_parent">
     <LinearLayout
      android:id="@+id/slidelinear_info"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:gravity="center"
      android:orientation="vertical">
         <TextView /> ....
         <de.hdodenhof.circleimageview.CircleImageView 
          xmlns:app="http://schemas.android.com/apk/res-auto"
          android:id="@+id/slideimg"
          android:layout_width="200dp"
          android:layout_height="200dp"
          android:paddingTop="10dp"
          android:layout_centerHorizontal="true"
          android:layout_centerVertical="true"
          app:civ_border_color="@color/black"
          app:civ_border_width="3dp" />
        <TextView /> ....
    </LinearLayout>
</ScrollView>