LinearLayout子项推送其他视图

时间:2018-01-08 09:33:36

标签: android android-linearlayout

我的活动的主要布局是LinearLayout。它有两个孩子作为例子。一个RelativeLayout和一个按钮。 RelativeLayout的宽度和高度设置为match_parent,按钮设置为match_parentwrap_content。不幸的是,RelativeLayout按下按钮直到它不可见。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>

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

为什么会这样?我尝试对RelativeLayout进行调整,将高度改为0dp,重量为1.它确实使按钮可见,但我不确定这是否可取,因为我只改变了身高和体重RelativeLayout

6 个答案:

答案 0 :(得分:3)

试试这个

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:fillViewport="true"
    android:layout_height="match_parent">

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <ImageView
                android:layout_width="match_parent"
                android:layout_height="match_parent" />

        </RelativeLayout>

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
</ScrollView>

OR

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:fillViewport="true"
    android:layout_height="match_parent">

      <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
       android:layout_height="match_parent">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_above="@+id/btn"
        android:layout_height="match_parent">

        <ImageView
            android:layout_width="match_parent"
            android:src="@drawable/disha"
            android:layout_height="match_parent" />

    </RelativeLayout>

    <Button
        android:id="@+id/btn"
        android:layout_width="match_parent"
        android:layout_margin="10dp"
        android:text="NIlu"
        android:layout_alignParentBottom="true"
        android:layout_height="wrap_content" />
</RelativeLayout>
</ScrollView>

答案 1 :(得分:2)

LinearLayout是垂直或水平。您的第一个孩子RelativeLayoutmatchParent,然后它将覆盖整个外部布局。 解决方案可以是多个,取决于您希望放置Button的确切位置。一种方法是。

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_above="@+id/btn"
        android:layout_height="match_parent">

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </RelativeLayout>

    <Button
        android:id="@+id/btn"
        android:layout_width="match_parent"
        android:layout_margin="10dp"
        android:layout_alignParentBottom="true"
        android:layout_height="wrap_content" />
</RelativeLayout>

答案 2 :(得分:1)

更改您的代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </RelativeLayout>

    <Button
        android:text="@string/app_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

我的敌人...... 您应该将android:layout_weight="1"提供给相对布局

答案 3 :(得分:0)

//试试这个

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="200dp" />

</RelativeLayout>

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

答案 4 :(得分:0)

这似乎工作得很好。

  

我尝试对RelativeLayout进行调整,将高度更改为   0dp,权重为1

代码如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    >

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
</RelativeLayout>

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

</LinearLayout>

答案 5 :(得分:0)

在您的布局中,RelativeLayout是您LinearLayout的第一个孩子。因为,您已将高度和宽度设置为match_parent,它会占用所有可用空间,将按钮推出视图。

当您将RelativeLayout高度设置为0dp且权重设置为1时,LinearLayout会根据指定的尺寸首先布置所有子项,然后根据权重分配剩余空间。在这种情况下,相对布局为0dp,因此在第一次传递时不占用空格,按钮会根据其onMeasure占用空间(比如说100dp)。剩余空间现在提供给RelativeLayout,因为其权重设置为1.有关详细信息here,请参阅LinearLayout文档。

您应该考虑使用RelativeLayout / ConstraintLayout作为根元素。