将ImageView设置为ScrollView内部屏幕高度的一部分

时间:2015-01-02 06:51:39

标签: android android-layout android-scrollview android-layout-weight

我有这个想要裁剪的ImageView占用不超过屏幕尺寸的1/3。我使用layout_height =" 0dp"使用了以下布局和layout_weight在需要的地方,但ImageView的高度应该超出预期。如果我用LinearLayout替换ScrollView,一切都应该到位。我的猜测是因为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>

以下是它的样子:

Layout Final

2 个答案:

答案 0 :(得分:1)

根据文档,Scrollview具有“无限高度”:

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

所以,“1/3”高度确实没有意义 - LinearLayout将简单地占用Scrollview中所需/想要/可以的任何高度。

如果您希望View为屏幕大小的1/3,但您还希望它滚动,则使用DisplayMetrics计算屏幕高度,然后相应地布局元素。 (同样,如果您希望“顶部”部分为屏幕高度的2/3,请执行相同的操作。)

见这篇文章:

How to get screen display metrics in application class

答案 1 :(得分:0)

在ImageView中,试试这个

android:layout_gravity="center_horizontal"
android:scaleType="centerInside"