ViewPager в ScrollView
Мне нужно иметь ViewPager
внутри ScrollView
, но ViewPager
просто не появляется, когда он находится в ScrollView
, все нормально, когда я не использую ScrollView
.
Я видел пару таких вопросов, как это задавали здесь в stackoverflow или на других сайтах, и всем им ответили, что вам нужно поместить android:fillViewport="true"
в scrollview, чтобы устранить проблему, но это решение не работает для me, ViewPager
все еще не появляется, даже если у меня есть android:fillViewport="true"
в моем ScrollView
.
Я предполагаю, что что-то изменилось в orroid api или что-то еще, и это решение больше не работает, кто-нибудь знает, как я могу сделать ViewPager
в ScrollView
?
UPDATE: рабочий макет 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>
Ответы
Ответ 1
В прошлом я столкнулся с подобной проблемой. View-Pager должен иметь высоту набора (он не может содержать-содержимое). Поскольку ViewPager загружает отдельные страницы, а не все сразу, он не будет знать, что означает "wrap-content". Установка layout_height для fill_parent или набора dp позволяет ViewPager статически устанавливать его высоту и более точно реагировать на другие макеты.
Ответ 2
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);
}}
Ответ 3
Я нашел решение для шахты, используя "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>
Ответ 4
Просто добавьте android: fillViewport = "true" в ваш просмотр прокрутки будет работать