Установка 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"