将LinearLayout保留在屏幕底部

时间:2017-09-21 22:24:28

标签: android xaml xamarin

我知道这个问题被问了很多,因为我在这里发布了很多例子,但我只是无法使它成功,这就是我所拥有的:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:cardview="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:background="#3F51B5"
    android:padding="5dp"
    android:paddingBottom="500dp">
    <LinearLayout
        android:orientation="vertical"
        android:minWidth="25px"
        android:minHeight="25px"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:id="@+id/linearLayout2"
        android:gravity="bottom"
        android:layout_weight="1">
        <Button
            android:text="Button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/btnTarjeta"
            android:background="@color/my_purple"
            android:layout_marginBottom="20dp"
            android:layout_marginTop="20dp" />
        <TextView
            android:text="Text"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="@color/my_white"
            android:id="@+id/textView1"
            android:fontFamily="sans-serif-medium"
            android:layout_marginBottom="10dp" />
        <RadioGroup
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/radioGp"
            android:minWidth="25px"
            android:minHeight="25px"
            android:layout_marginBottom="10dp" />
    </LinearLayout>
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/linearLayout3"
        android:layout_gravity="bottom">
        <Button
            android:text="Button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/button2" />
        <Button
            android:text="Button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/button1" />
    </LinearLayout>
</LinearLayout>

可能是“问题”的一个原因是我正在动态填充收音机组内的单选按钮,所以有时可以是4个单选按钮,在其他时刻可以是1,我不知道如果这会影响我正在尝试做的任何事情。

我要做的是将第一个线性图层保持在顶部,将第二个线性图层保持在按钮处。我做错了什么?

4 个答案:

答案 0 :(得分:0)

首先要做的就是将高度作为match_parent放到主容器中,然后将视图扩展为设备屏幕的高度,接下来我无法理解为什么你的第一个孩子 - LinearLayout的0dp为android:layout_height,但你应该把它放到android:layout_height="wrap_content",最后要做的就是将android:layout_gravity="bottom"放到第二个子LinearLayout。

另外我建议阅读android:layout_gravity =“”和android:gravity =“”的区别,它们都是LinearLayout属性。

更新

  1. 从主容器中删除android:gravity =“center_horizo​​ntal” 让孩子们去中心。

  2. 删除android:gravity =“bottom”android:layout_weight =“1”from 第一个孩子你为什么要去第一个线性布局去 底

  3. 这是一些干净的代码:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:cardview="http://schemas.android.com/apk/res-auto"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#3F51B5"
        android:padding="20dp">
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/linearLayout2">
            <Button
                android:text="Button"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/btnTarjeta"
                android:background="@color/my_purple"
                android:layout_marginBottom="20dp"
                android:layout_marginTop="20dp" />
            <TextView
                android:text="Text"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textColor="@color/my_white"
                android:id="@+id/textView1"
                android:fontFamily="sans-serif-medium"
                android:layout_marginBottom="10dp" />
            <RadioGroup
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/radioGp"
                android:minWidth="25px"
                android:minHeight="25px"
                android:layout_marginBottom="10dp" />
        </LinearLayout>
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/linearLayout3"
            android:layout_gravity="bottom">
            <Button
                android:text="Button"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/button2" />
            <Button
                android:text="Button"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/button1" />
        </LinearLayout>
    </LinearLayout>
    

答案 1 :(得分:0)

由于LinearLayout gravity并非始终按预期工作,我建议您将内部LinearLayout设为android:layout_height="wrap_content"并插入空View将垂直拉伸并填充顶部和底部内容之间的所有可用空间。

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

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/linearLayout2">
        <Button ... />
        <TextView ... />
        <RadioGroup .../>
    </LinearLayout>

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

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/linearLayout3">
        <Button ... />
        <Button ... />
    </LinearLayout>
</LinearLayout>

答案 2 :(得分:0)

请下次更好地描述您的确切需求。我不确定,但也许你想要这个。将您的根LinearLayout height更改为match_parent,并先删除LinearLayout android:gravity="bottom"

Screenshot of Android Studio Preview

答案 3 :(得分:0)

你可以使用layout_weight。 80和20,它将适用于所有屏幕

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:cardview="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:background="#3F51B5"
android:gravity="center_horizontal"
android:orientation="vertical"
android:padding="5dp"
android:paddingBottom="500dp"
android:weightSum="100">

<LinearLayout
    android:id="@+id/linearLayout2"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="80"
    android:gravity="bottom"
    android:minHeight="25px"
    android:minWidth="25px"
    android:orientation="vertical">

    <Button
        android:id="@+id/btnTarjeta"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
        android:layout_marginTop="20dp"
        android:background="@color/my_purple"
        android:text="Button" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:fontFamily="sans-serif-medium"
        android:text="Text"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="@color/my_white" />

    <RadioGroup
        android:id="@+id/radioGp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:minHeight="25px"
        android:minWidth="25px" />
</LinearLayout>



  <LinearLayout
    android:id="@+id/linearLayout3"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_gravity="bottom"
    android:layout_weight="20"
    android:orientation="vertical">

    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button" />

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button" />
 </LinearLayout>
</LinearLayout>