RelativeLayout底部对齐的按钮被裁剪了。

3

我在RelativeLayout中有一个按钮,当我使用android:layout_alignParentBottom="true"属性时,它被截断了,但是我尝试的其他方法也没有正确地工作。有什么建议吗?

这是我的布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.cdar.sab.cdar.MainActivity$PlaceholderFragment">

    <TextView
        android:id="@+id/section_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/diagnostics_title" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textEmailAddress"
        android:ems="10"
        android:layout_below="@+id/section_label"
        android:layout_alignParentStart="true"
        android:layout_marginTop="42dp"
        android:hint="@string/email_hint"
        android:id="@+id/emailTB" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textMultiLine"
        android:ems="10"
        android:layout_below="@+id/emailTB"
        android:layout_alignParentStart="true"
        android:layout_marginTop="45dp"
        android:hint="@string/message_hint"
        android:maxLines="10"
        android:id="@+id/messageTB" />

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

</RelativeLayout>

你的布局没问题。 - azizbekian
工具 -> 布局检查器 与你同在。 - azizbekian
@MikeM。我正在使用Android Studio中的选项卡应用程序模板,因此视图位于片段内。我猜这会使视图比正常情况下更低,因为顶部有一个栏。有没有办法解决这个问题,以便按钮在所有屏幕上都能正确显示?也许有一种方法可以获取选项卡栏的高度并将其添加为填充? - sabo
3
请发布屏幕截图。 - Jitesh Mohite
1
请添加截图,由于EditText或TextView中的大文本,您的视图可能会变形。为更好的效果,您可以使用ScrollView作为根视图。 - Rahul
显示剩余7条评论
9个回答

1
你在主容器中设置了布局填充,即:
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"

使用外边距而不是内边距可以解决你的问题。尝试以下代码:
android:marginBottom="@dimen/activity_vertical_margin"
android:marginLeft="@dimen/activity_horizontal_margin"
android:marginRight="@dimen/activity_horizontal_margin"
android:marginTop="@dimen/activity_vertical_margin"

这个没有起作用,只是使间距变得非常奇怪。 - sabo

1

很难理解为什么UI会失真,可能有很多原因,但我高度怀疑是您的输入框中的文本限制超出了导致UI失真。请添加截图以获得更好的理解。因此,我尝试减小文本大小和视图之间的边距,以确保如果由于少量边距而导致UI失真。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">

<TextView
    android:id="@+id/section_label"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Diagnostic"
    android:textSize="12sp"/>

<EditText
    android:id="@+id/emailTB"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/section_label"
    android:layout_marginTop="22dp"
    android:ems="10"
    android:hint="Hint"
    android:inputType="textEmailAddress"
    android:textSize="12sp"/>

<EditText
    android:id="@+id/messageTB"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/emailTB"
    android:layout_marginTop="25dp"
    android:ems="10"
    android:hint="Hint"
    android:inputType="textMultiLine"
    android:maxLines="10"
    android:textSize="12sp"/>

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

</RelativeLayout>

谢谢。在我的TextView中更改文本大小使视图适合屏幕内。 - sabo

0
我使用LinearLayout修改了你的布局,希望对你有用。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.cdar.sab.cdar.MainActivity$PlaceholderFragment">

    <TextView
        android:id="@+id/section_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/diagnostics_title" />

    <EditText
        android:id="@+id/emailTB"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="42dp"
        android:ems="10"
        android:hint="@string/email_hint"
        android:inputType="textEmailAddress" />

    <EditText
        android:id="@+id/messageTB"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_marginTop="45dp"
        android:layout_weight="1"
        android:ems="10"
        android:hint="@string/message_hint"
        android:inputType="textMultiLine"
        android:maxLines="10" />

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0dp"
        android:text="Button" />

</LinearLayout>

我会尝试一下,看看这是否是我需要进行的更改。谢谢! - sabo
不妨将EditText的高度设置为0dp,布局权重设置为1,然后在EditText和按钮之间插入一个普通视图,高度也设置为0dp,布局权重同样为1。我不是100%确定,但我认为你的解决方案可能会导致EditText文本被放置在视图的底部或中心,这可能看起来很奇怪。 - xxtesaxx
我的解决方案适用于变量高度的对话框,例如如果它包含可展开列表。 - from56

0
希望这能有所帮助:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.cdar.sab.cdar.MainActivity$PlaceholderFragment">

<RelativeLayout
    android:id="@+id/rlContainer"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/section_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/diagnostics_title" />

    <EditText
        android:id="@+id/emailTB"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/section_label"
        android:layout_marginTop="42dp"
        android:ems="10"
        android:hint="@string/email_hint"
        android:inputType="textEmailAddress" />

    <EditText
        android:id="@+id/messageTB"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/emailTB"
        android:layout_marginTop="45dp"
        android:ems="10"
        android:hint="@string/message_hint"
        android:inputType="textMultiLine"
        android:maxLines="10" />

</RelativeLayout>

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/rlContainer">

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:text="Button" />
</RelativeLayout>


在布局预览中看起来很好,但当我在设备上加载它时,出现了与我的问题相同的情况。 - sabo
尝试给包含按钮的相对布局设置底部边距。 - Inderpreet singh
那个符合预期。对于我当前设置边距的设备来说,它看起来很好,但其他屏幕尺寸不同。我需要在各种屏幕尺寸下保持一致。 - sabo

0
你需要在Button中添加一个外层相对布局。
<RelativeLayout..............>
    <RelativeLayout android:id="@+id/content_rl>
    <!-- Some ELEMENTS -->
    </RelativeLayout>

    <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/content_rl">

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:text="Button" />
</RelativeLayout>

那就是Inderpreet Singh建议的做法,但它并没有正确地工作。 - sabo

0
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp">

<TextView
    android:id="@+id/section_label"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Some Title" />

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textEmailAddress"
    android:ems="10"
    android:layout_below="@+id/section_label"
    android:layout_alignParentStart="true"
    android:layout_marginTop="42dp"
    android:hint="Some hint"
    android:id="@+id/emailTB" />

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textMultiLine"
    android:ems="10"
    android:layout_below="@+id/emailTB"
    android:layout_alignParentStart="true"
    android:layout_marginTop="45dp"
    android:hint="Some hint"
    android:maxLines="10"
    android:id="@+id/messageTB" />

<RelativeLayout
    android:layout_below="@+id/messageTB"
    android:layout_alignParentBottom="true"
    android:layout_width="match_parent"
    android:gravity="bottom"
    android:layout_height="wrap_content">
    <Button
        android:text="Button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/button"
        android:layout_centerInParent="true"/>
</RelativeLayout>

image


0
请添加一个截图以更好地理解问题,如果按钮的一半被隐藏在屏幕导航栏后面(因为某些设备具有屏幕导航栏,而其他设备则在屏幕外),那么请在您的RelativeLayout中添加此行:android:fitsSystemWindows="true"或者您可以使用代码来隐藏导航栏。

我会尝试添加android:fitsSystemWindows="true",并在此之后与您联系。谢谢! - sabo

0

我看到你在PlaceholderFragment中使用了布局。我曾经在一个fragment中使用适配器时遇到过同样的问题。你应该尝试用第二个EditText约束按钮,然后运行代码(快速修复)。我认为问题在于当你在Fragment中运行代码时,布局会被移动,match_parent会计算为整个屏幕(或活动的大小),从而将按钮与父活动对齐,然后将布局向下移动以腾出标签标签的空间。
布局看起来很好


我只是不确定如何让它在所有不同的屏幕尺寸上保持底部对齐。 - sabo

-1

也许你可以尝试为你的按钮设置marginBottom

 android:layout_marginBottom="8dp"

问题在于,这样做的话,不同屏幕尺寸上的间距将无法匹配。 - sabo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接