如何在屏幕底部对齐视图,但也在相对布局中的其他视图下方对齐

Posted

技术标签:

【中文标题】如何在屏幕底部对齐视图,但也在相对布局中的其他视图下方对齐【英文标题】:how to align view at the bottom of the screen but also below other view in relative layout 【发布时间】:2021-06-30 14:05:17 【问题描述】:

我希望 imageView 始终位于屏幕底部,但我也希望它位于 LinearLayou 视图下方,这样它们就不会相互重叠,并且图像可以根据屏幕更改其大小。

这就是我正在做的事情

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:background="@color/background_color"
    android:paddingTop="@dimen/main_padding"
    android:paddingRight="@dimen/main_padding"
    android:paddingLeft="@dimen/main_padding"
    android:layout_
    tools:context=".welcomeActivity">

    <TextView
        android:id="@+id/textView_welcome"
        android:paddingTop="8dp"
        android:paddingBottom="5dp"
        android:layout_
        android:layout_
        android:layout_centerHorizontal="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="20dp"
        android:fontFamily="@font/great_vibes"
        android:layout_marginRight="20dp"
        android:background="@drawable/actionbar_background"
        android:gravity="center"
        android:text="@string/who_am_i"
        android:textColor="@color/text_color_white"
        android:textSize="44sp" />

    <LinearLayout
        android:layout_marginTop="50dp"
        android:layout_
        android:orientation="vertical"
        android:id="@+id/lisearLayout_welcome"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/textView_welcome"
        android:layout_>

        <androidx.cardview.widget.CardView
            style="@style/MyCardView"
            app:cardCornerRadius="40dp"
            android:layout_
            android:id="@+id/customerButton"
            android:layout_>

            <RelativeLayout
                android:layout_
                android:layout_>
                <TextView
                    android:layout_
                    android:layout_centerInParent="true"
                    android:text="@string/customer"
                    android:textSize="44sp"
                    android:fontFamily="@font/great_vibes"
                    android:textColor="@color/button_color_black1"
                    android:layout_/>
            </RelativeLayout>

        </androidx.cardview.widget.CardView>


        <androidx.cardview.widget.CardView
            style="@style/MyCardView"
            app:cardCornerRadius="40dp"
            android:layout_
            android:id="@+id/employButton"
            android:layout_>

            <RelativeLayout
                android:layout_
                android:layout_>
                <TextView
                    android:layout_
                    android:layout_centerInParent="true"
                    android:text="@string/employ"
                    android:fontFamily="@font/great_vibes"
                    android:textSize="44sp"
                    android:textColor="@color/button_color_black1"
                    android:layout_/>
            </RelativeLayout>

        </androidx.cardview.widget.CardView>

    </LinearLayout>

    <ImageView
        android:layout_marginTop="5dp"
        android:id="@+id/image_welcome"
        android:layout_
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/lisearLayout_welcome"
        android:layout_alignParentBottom="true"
        android:src="@drawable/ic_french_fries"
        android:layout_/>


</RelativeLayout>

看到底部和图像之间的黄色间隙,这就是我不想要的。

任何建议将不胜感激

【问题讨论】:

【参考方案1】:

我在顶部添加了 RelativeLayout 属性 alignPatentBottom="true" 现在你的薯条应该在底部。 :) 在我的模拟器中一切正常。如果可行,很高兴收到一些反馈?

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:background="@color/background_color"
    android:paddingTop="@dimen/main_padding"
    android:paddingRight="@dimen/main_padding"
    android:paddingLeft="@dimen/main_padding"
    android:layout_
    tools:context=".welcomeActivity"
    android:layout_alignParentBottom="true">

    <TextView
        android:id="@+id/textView_welcome"
        android:paddingTop="8dp"
        android:paddingBottom="5dp"
        android:layout_
        android:layout_
        android:layout_centerHorizontal="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="20dp"
        android:fontFamily="@font/great_vibes"
        android:layout_marginRight="20dp"
        android:background="@drawable/actionbar_background"
        android:gravity="center"
        android:text="@string/who_am_i"
        android:textColor="@color/text_color_white"
        android:textSize="44sp" />

    <LinearLayout
        android:layout_marginTop="50dp"
        android:layout_
        android:orientation="vertical"
        android:id="@+id/lisearLayout_welcome"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/textView_welcome"
        android:layout_>

        <androidx.cardview.widget.CardView
            style="@style/MyCardView"
            app:cardCornerRadius="40dp"
            android:layout_
            android:id="@+id/customerButton"
            android:layout_>

            <RelativeLayout
                android:layout_
                android:layout_>
                <TextView
                    android:layout_
                    android:layout_centerInParent="true"
                    android:text="@string/customer"
                    android:textSize="44sp"
                    android:fontFamily="@font/great_vibes"
                    android:textColor="@color/button_color_black1"
                    android:layout_/>
            </RelativeLayout>

        </androidx.cardview.widget.CardView>


        <androidx.cardview.widget.CardView
            style="@style/MyCardView"
            app:cardCornerRadius="40dp"
            android:layout_
            android:id="@+id/employButton"
            android:layout_>

            <RelativeLayout
                android:layout_
                android:layout_>
                <TextView
                    android:layout_
                    android:layout_centerInParent="true"
                    android:text="@string/employ"
                    android:fontFamily="@font/great_vibes"
                    android:textSize="44sp"
                    android:textColor="@color/button_color_black1"
                    android:layout_/>
            </RelativeLayout>

        </androidx.cardview.widget.CardView>

    </LinearLayout>


    <ImageView
        android:id="@+id/image_welcome"
        android:layout_
        android:layout_
        android:layout_below="@+id/lisearLayout_welcome"
        android:layout_alignParentBottom="true"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="0dp"
        android:src="@drawable/ic_french_fries" />


</RelativeLayout>

【讨论】:

那不行,还有那个差距【参考方案2】:

删除ImageView 中的android:layout_below="@+id/lisearLayout_welcome" 并将android:layout_above="@id/image_welcome" 添加到LinearLayout。 通过这种方式,您将可用空间分配给LinearLayout,而不是在您的代码中,您将可用空间分配给ImageView

使用类似的东西:

<RelativeLayout>
   <TextView/>
   <LinearLayout
        android:layout_above="@id/image_welcome"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/textView_welcome">

       <!-- ... -->

  </LinearLayout>

  <ImageView
        android:layout_marginTop="5dp"
        android:id="@+id/image_welcome"
        android:layout_
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        android:src="@drawable/..."
        android:layout_/>

</RelativeLayout>

在纵向模式下使用vertical 在LinearLayout 中应用不同的方向,在横向模式下使用horizontal

【讨论】:

我不想让视图滚动,有没有其他办法 @TehleelMir 是的,这取决于您想要实现的目标。例如卡片并排的不同布局? 是的,我希望所有视图都可见且不重叠 @TehleelMir 只需使用答案中报告的相同布局并更改 LinearLayout 的方向(纵向模式为垂直,横向模式为水平)

以上是关于如何在屏幕底部对齐视图,但也在相对布局中的其他视图下方对齐的主要内容,如果未能解决你的问题,请参考以下文章

如何锚定相对于屏幕 iPhone 一侧的视图

Android:对齐父底部+底部边距

如何使用自动布局将图像彼此水平对齐

(颤振)在屏幕底部对齐水平列表视图(及相关问题)

相对于父视图的底部定位 UIView?

如何以编程方式在顶部和底部的垂直线性布局中设置一个视图?