Android布局将一个布局放在另外两个布局的中间

Posted

技术标签:

【中文标题】Android布局将一个布局放在另外两个布局的中间【英文标题】:Android layout place a layout in the middle of another two layouts 【发布时间】:2017-07-06 22:40:27 【问题描述】:

您好,我必须使用常规的 android 布局创建如下所示的 UI(附图片)。我得到了页眉、页脚和中间区域以及图像视图。 根据图片:A区和C区高度相似(屏幕的20%),图像视图应始终放置在B区和C区的中间。

我现在的xml代码是这样的

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_
    android:layout_
    >

    <LinearLayout
        android:id="@+id/show_contact_bottomArea"
        android:layout_
        android:layout_
        android:orientation="vertical"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true">

    </LinearLayout>

    <LinearLayout
        android:id="@+id/show_contact_middleArea"
        android:layout_
        android:layout_
        android:orientation="vertical"
        android:background="@color/grayContact"
        android:layout_below="@+id/show_contact_headerArea"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_above="@+id/show_contact_bottomArea">
        
    </LinearLayout>

    <LinearLayout
        android:id="@+id/show_contact_headerArea"
        android:layout_
        android:layout_
        android:orientation="vertical"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"></LinearLayout>

    <ImageView
        android:layout_
        android:layout_
        app:srcCompat="@drawable/common_google_signin_btn_icon_dark_focused"
        android:id="@+id/imageView2"
        android:layout_marginBottom="40dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true" />

</RelativeLayout>

我给了

marginBottom="40dp"

对于图像视图将其向上推,这不是一个好习惯。将图像视图放置在区域 B 和区域 C 边界中心的最佳方法是什么。

目前我也给了

android:layout_

对于区域 A 和区域 B 的高度,但理想情况下两者都应该是屏幕的 20%(每个),如何实现呢?

【问题讨论】:

使用框架布局。它可以灵活地满足这些类型或要求 【参考方案1】:

您可以为每个 AC 赋予 20 % 的权重。这样它们将分别占据顶部和底部的 20%。将其余 60% 的高度分配给 B

对于 imageView,您可以将整个布局放置在坐标布局中,并将锚点分配给页脚。

她是代号sn-p

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_
    android:layout_>


    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_
        android:layout_
        android:orientation="vertical"
        android:weightSum="10">

        <LinearLayout

            android:id="@+id/show_contact_bottomArea"
            android:layout_
            android:layout_
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_weight="2"
            android:background="@color/primary_light"
            android:orientation="vertical">

        </LinearLayout>

        <LinearLayout
            android:id="@+id/show_contact_middleArea"
            android:layout_
            android:layout_
            android:layout_above="@+id/show_contact_bottomArea"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_below="@+id/show_contact_headerArea"
            android:layout_weight="6"
            android:background="@color/holo_blue_light"
            android:orientation="vertical">

        </LinearLayout>

        <LinearLayout
            android:id="@+id/show_contact_headerArea"
            android:layout_
            android:layout_
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:layout_weight="2"
            android:background="@color/primary"
            android:orientation="vertical"></LinearLayout>


    </LinearLayout>

    <ImageView
        android:id="@+id/imageView2"
        android:layout_
        android:layout_
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="40dp"
        app:layout_anchor="@+id/show_contact_headerArea"
        app:layout_anchorGravity="center_horizontal|top"
        app:srcCompat="@drawable/header_record" />


</android.support.design.widget.CoordinatorLayout>

结果:- 我用不同的颜色代码为不同的部分着色。

【讨论】:

感谢您的回答,它有效。是否可以根据C区的高度设置imageview的高度?我希望图像视图的高度是区域 C 高度的一半? 找到C线性布局的高度***.com/questions/12068945/…,然后动态设置它的高度***.com/questions/3144940/…【参考方案2】:

使用权重给出区域和框架布局的确切部分 例如: 权重总和 =4 必须在父线性布局中给出 A区给1 b区给2 c区给1

在区域 B 之后添加带有顶部的图像视图 -(您希望出现在 B 部分的高度)

【讨论】:

以上是关于Android布局将一个布局放在另外两个布局的中间的主要内容,如果未能解决你的问题,请参考以下文章

左右固定,中间自适应布局

XML 绝对布局将图像放在左下角和右下角

Android开发, 布局,控件占用剩余所有宽度。

如何将 2 个布局放在彼此之上

三种方式实现圣杯布局

FrameLayout(帧布局)