ViewPager в ScrollView
Мне нужно иметь ViewPager
внутри ScrollView
но ViewPager
просто не появляется, когда он в ScrollView
все нормально когда я не пользуюсь ScrollView
,
Я видел пару подобных вопросов, задаваемых здесь на stackru или на других сайтах, и на все они были даны ответы, которые вы должны задать android:fillViewport="true"
к вашему обзору прокрутки, чтобы решить проблему, но это решение не работает для меня, ViewPager
до сих пор не появляется, даже если у меня есть android:fillViewport="true"
в моем ScrollView
,
Я думаю, что-то изменилось в Android API, или что-то, и это решение больше не работает, кто-нибудь знает, как я мог бы сделать ViewPager
появляются в ScrollView
?
ОБНОВЛЕНИЕ: рабочий макет ScrollView XML:
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true">
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<android.support.v4.view.ViewPager
android:id="@+id/itemsViewPager2"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</android.support.v4.view.ViewPager>
</LinearLayout>
</ScrollView>
4 ответа
Я сталкивался с подобной проблемой в прошлом. View-Pager должен иметь заданную высоту (он не может переносить содержимое). Поскольку ViewPager загружает отдельные страницы, а не все сразу, он не будет знать, что на самом деле означает "wrap-content". Установка для layout_height значения fill_parent или установленного значения dp позволяет ViewPager статически устанавливать свою высоту и более соответствующим образом реагировать в других макетах.
public class YourScrollableViewPager extends ViewPager {
private static final int MATCH_PARENT = 1073742592;
private int currentPageNumber;
private int pageCount;
public YourScrollableViewPager(Context context) {
super(context);
prepareUI();
}
public YourScrollableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
prepareUI();
}
private void prepareUI() {
setOffscreenPageLimit(pageCount);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int height = 0;
if (getChildCount() != 0) {
View child = getChildAt(currentPageNumber);
child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
int h = child.getMeasuredHeight();
if (h > height) height = h;
}
heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
public void onPrevPage() {
onMeasure(MATCH_PARENT, 0);
}
public void onNextPage() {
onMeasure(MATCH_PARENT, 0);
}}
Я нашел решение для моего использования "HorizontalScrollView"
вместо ScrollView
,
Сначала создать activity_main.xml
с кодом ниже, где вы определяете ViewPager.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
А позже создай еще left.xml
для определения вашего HorizontalScrollView
:
<?xml version="1.0" encoding="utf-8"?>
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res
/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/ic_launcher" />
</HorizontalScrollView>
Просто добавьте android:fillViewport="true" в ваше представление прокрутки, оно будет работать