Horizo​​ntalScrollView显示与屏幕大小相同的视图

时间:2016-08-31 13:11:09

标签: android scrollview

我有一个带有3个ImageView的Horizo​​ntalScrollView。我需要有与屏幕宽度相同的图像。

你能帮我吗?

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<HorizontalScrollView android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:fillViewport="true">
    <LinearLayout android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">
        <ImageView android:id="@+id/image1"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_alignParentEnd="false"
                   android:src="@drawable/placeholder"/>
        <ImageView android:id="@+id/image2"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:src="@drawable/placeholder"/>
        <ImageView android:id="@+id/image3"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:src="@drawable/placeholder"/>
    </LinearLayout>
</HorizontalScrollView>

3 个答案:

答案 0 :(得分:0)

在每个ImageView和您的LinearLayout,Horizo​​ntalScrollView

中更改为android:layout_width =“match_parent”

答案 1 :(得分:0)

是的,我也很满意'Stanislav Parkhomenko'。如果您需要具有相同宽度的屏幕图像,则在Horizo​​ntalScrollView以及每个ImageView中使用android:layout_width =“match_parent”更改值。就是这样。

答案 2 :(得分:0)

因为屏幕宽度会因不同的设备而异,您可以通过以下方法之一来设置运行时的宽度。为了适当地获得屏幕宽度,我们可以使用ViewTreeObserver。以下是我从您的布局派生的测试的xml文件:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <HorizontalScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">

        <LinearLayout
            android:id="@+id/ll"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <ImageView
                android:id="@+id/image1"
                android:layout_width="wrap_content"
                android:layout_height="200dp"
                android:background="@android:color/holo_red_light"/>

            <ImageView
                android:id="@+id/image2"
                android:layout_width="wrap_content"
                android:layout_height="200dp"
                android:background="@android:color/holo_blue_bright"/>

            <ImageView
                android:id="@+id/image3"
                android:layout_width="wrap_content"
                android:layout_height="200dp"
                android:background="@android:color/holo_green_dark"/>
        </LinearLayout>
    </HorizontalScrollView>
</LinearLayout>

请注意,我将android:id="@+id/ll"属性提供给包含ImageView的布局。现在,对于Java代码,我们可以实现ViewTreeObserver并在运行时相应地设置宽度:

    final LinearLayout ll = (LinearLayout) findViewById(R.id.ll);
    final ViewTreeObserver viewTreeObserver = ll.getViewTreeObserver();

    viewTreeObserver.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        @Override
        public boolean onPreDraw() {
            ll.getViewTreeObserver().removeOnPreDrawListener(this);

            int width = ll.getWidth();
            View child;
            LinearLayout.LayoutParams params;

            for (int i = 0; i < ll.getChildCount(); i++) {
                child = ll.getChildAt(i);
                params = (LinearLayout.LayoutParams) child.getLayoutParams();

                params.width = width;
                child.setLayoutParams(params);
            }

            return false;
        }
    });

这应该这样做。如果您遇到任何问题,请告诉我。