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.
这是我在 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.