Android XML 布局 - ImageView 占据全部 space

Android XML Layout - ImageView taking all space

这是我在 Whosebug 上的第一个 post。 我的问题与 ImageViews 相关:我有一个简单的 XML 布局文件,它由包含在一般 LinearLayout 中的两个 LinearLayouts 组成。 第一个 LinearLayout 包含一个简单的 ImageView,第二个包含三个按钮。

我的问题是 ImageView 占据了屏幕上的所有 space,因此没有显示三个按钮。 我做了很多研究,我试图改变我能做的一切来让它工作,唯一成功的是把 ImageView layout_width 属性变成一个 dp 值。 为什么我必须这样做?它是否与原始图片的尺寸 (1280 x 800) 有某种关系?

XML 文件是:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:id="@+id/linearMainCreateTape"
 android:layout_height="match_parent"
 android:layout_width="match_parent"
 android:orientation="horizontal"
 tools:context="com.example.anthony.walkmanfreeversion.CreateTapeActivity" >
    <LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="match_parent">
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/imageView"
            android:src="@drawable/highresoltape1"/>
    </LinearLayout>
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <Button
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="Button1"/>

            <Button
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="Button2"/>

            <Button
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="Button3"/>

        </LinearLayout>
    </LinearLayout>

您可以使用 android:layout_weight 来定义布局应占用多少 space:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  xmlns:tools="http://schemas.android.com/tools"
  android:id="@+id/linearMainCreateTape"
  android:layout_height="match_parent"
  android:layout_width="match_parent"
  android:orientation="horizontal"
  tools:context="com.example.anthony.walkmanfreeversion.CreateTapeActivity" >
  <LinearLayout
      android:layout_width="wrap_content"
      android:layout_height="0dp"
      android:layout_weight="1">
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/imageView"
            android:src="@drawable/highresoltape1"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical">
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Button1"/>

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Button2"/>

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Button3"/>

    </LinearLayout>
</LinearLayout>

在上面的示例中,两个内部布局具有相同的权重,因此它们不会填充 50% 的高度。

如果所有视图都保留整个可用高度 (match_parent),则第一个视图获胜。因此,在您的情况下,顶层布局 (linearMainCreateTape) 会填充整个高度,而包含 ImageView 的布局也是如此。所以它下面的三个按钮就没有了。

对于遇到此问题的任何人,都有一个快速解决方案。

在您的 imageView XML 中添加以下内容 属性:

android:adjustViewBounds="true"

为了。例如

<ImageView
        android:adjustViewBounds="true"
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:srcCompat="@mipmap/ic_launcher"/>

If you are using a Constraint Layout, don't forget to add the constraints.