Установка ImageView на часть высоты экрана внутри ScrollView

У меня есть этот ImageView, который я хочу обрезать, чтобы он занимал не более 1/3 размера экрана. Я использовал следующий макет, используя layout_height="0dp" и layout_weight, где это необходимо, но ImageView продолжает брать больше высоты, чем следовало бы. Если я заменю ScrollView на LinearLayout, все встанет на свои места, как и должно быть. Я думаю, это потому, что ScrollView имеет неограниченную высоту... Как я могу заставить ScrollView соблюдать реальную высоту макета своего родителя и достичь того, чего я хочу.

<?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"
>
    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:fillViewport="true"
    >
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical"
        >
            <ImageView
                android:id="@+id/imageview"
                android:layout_width="fill_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:src="@drawable/image"
                android:scaleType="centerCrop"
            />
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="0dp"
                android:layout_weight="2"
                android:orientation="vertical"
            >
                <TextView
                    android:id="@+id/textview1"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="16dp"
                    android:layout_marginLeft="16dp"
                    android:textAppearance="@style/TextAppearance.AppCompat.Headline"
                    android:text="Text1"
                />
                <TextView
                    android:id="@+id/textview2"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="4dp"
                    android:layout_marginLeft="16dp"
                    android:layout_marginRight="16dp"
                    android:textAppearance="@style/TextAppearance.AppCompat.Medium"
                    android:singleLine="true"
                    android:ellipsize="end"
                    android:marqueeRepeatLimit="marquee_forever"
                    android:text="Text2"
                />
                <TextView
                    android:id="@+id/textview3"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="4dp"
                    android:layout_marginLeft="16dp"
                    android:layout_marginRight="16dp"
                    android:textAppearance="@style/TextAppearance.AppCompat.Medium"
                    android:singleLine="true"
                    android:ellipsize="end"
                    android:marqueeRepeatLimit="marquee_forever"
                    android:text="Text3"
                />
                <TextView
                   android:id="@+id/textview4"
                   android:layout_width="fill_parent"
                   android:layout_height="wrap_content"
                   android:layout_marginTop="4dp"
                   android:layout_marginBottom="4dp"
                   android:layout_marginLeft="16dp"
                   android:layout_marginRight="16dp"
                   android:textAppearance="@style/TextAppearance.AppCompat.Body2"
                   android:singleLine="false"
                   android:text="Text4"
                />
            </LinearLayout>
        </LinearLayout>
    </ScrollView>
</LinearLayout>

Вот как это выглядит:

Макет Финал

2 ответа

Scrollview имеет "бесконечную высоту" в соответствии с документами:

http://developer.android.com/reference/android/widget/ScrollView.html

Таким образом, высота "1/3" в действительности не имеет значения - LinearLayout будет просто занимать любую высоту, в которой он нуждается / хочет / может в пределах Scrollview.

если вы хотите, чтобы представление составляло 1/3 размера экрана, но вы также хотите, чтобы оно прокручивалось, используйте DisplayMetrics рассчитать высоту экрана, а затем элементы макета соответственно. (Аналогично, если вы хотите, чтобы "верхняя" часть составляла 2/3 высоты экрана, сделайте то же самое.)

Смотрите этот пост:

Как получить показатели отображения экрана в классе приложения

Внутри вашего ImageView, попробуйте это

android:layout_gravity="center_horizontal"
android:scaleType="centerInside"
Другие вопросы по тегам