【问题标题】:Android - Layout_gravity="Bottom" does not go to the end on the screenAndroid - Layout_gravity="Bottom" 不会在屏幕上走到最后
【发布时间】:2023-03-13 08:27:01
【问题描述】:

我在使用 LinearLayout 时遇到了一些愚蠢的问题。 我在 setContentView 之前请求 NO_TITLE 功能,并且我的 Xaml 看起来像这样:

<LinearLayout
android:baselineAligned="false"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#E600323d"
tools:context="mycontext.Activities.dialogSignal"
android:layout_alignParentBottom="true"
android:gravity="center"
>

<TextView
    android:id="@+id/textView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp"
    android:text="SOME TEXT"
    android:textAlignment="center"
    android:textColor="@color/LightBlue"
    android:textSize="30sp"
    app:layout_heightPercent="10%"/>

<!-- FIRST ROW -->

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="5dp">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="0dp"
        android:layout_height="120dp"
        android:layout_weight="1"
        >
        <ImageButton
            android:onClick="bruitNavigate"
            android:src="@drawable/someDrawable"
            android:scaleType="fitCenter"
            android:background="@android:color/transparent"
            android:contentDescription="@string/descriptionContentSignal"
            android:layout_width="match_parent"
            android:layout_height="90dp"/>

        <TextView
            android:paddingTop="10dp"
            android:text="@string/SomeString"
            android:textSize="15sp"
            android:textAlignment="center"
            android:textColor="@color/LightBlue"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </LinearLayout>

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="0dp"
        android:layout_height="120dp"
        android:layout_weight="1"
        >
        <ImageButton
            android:src="@drawable/someDrawable"
            android:scaleType="fitCenter"
            android:background="@android:color/transparent"
            android:contentDescription="@string/descriptionContentSignal"
            android:layout_width="match_parent"
            android:layout_height="90dp"/>

        <TextView
            android:paddingTop="10dp"
            android:text="SomeString"
            android:textSize="15sp"
            android:textAlignment="center"
            android:textColor="@color/LightBlue"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </LinearLayout>

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="0dp"
        android:layout_height="120dp"
        android:layout_weight="1"
        >
        <ImageButton
            android:src="@drawable/someDrawable"
            android:scaleType="fitCenter"
            android:background="@android:color/transparent"
            android:contentDescription="@string/descriptionContentSignal"
            android:layout_width="match_parent"
            android:layout_height="90dp"/>

        <TextView
            android:paddingTop="10dp"
            android:text="@string/SomeString"
            android:textSize="15sp"
            android:textAlignment="center"
            android:textColor="@color/LightBlue"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </LinearLayout>

</LinearLayout>

<!-- SECOND ROW -->

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="5dp">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="0dp"
        android:layout_height="120dp"
        android:layout_weight="1"
        >
        <ImageButton
            android:src="@drawable/someDrawable"
            android:scaleType="fitCenter"
            android:background="@android:color/transparent"
            android:contentDescription="@string/descriptionContentSignal"
            android:layout_width="match_parent"
            android:layout_height="90dp"/>

        <TextView
            android:paddingTop="10dp"
            android:text="SomeString"
            android:textSize="15sp"
            android:textAlignment="center"
            android:textColor="@color/LightBlue"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </LinearLayout>

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="0dp"
        android:layout_height="120dp"
        android:layout_weight="1"
        >
        <ImageButton
            android:src="@drawable/someDrawable"
            android:scaleType="fitCenter"
            android:background="@android:color/transparent"
            android:contentDescription="@string/descriptionContentSignal"
            android:layout_width="match_parent"
            android:layout_height="90dp"/>

        <TextView
            android:paddingTop="10dp"
            android:text="SomeString"
            android:textSize="15sp"
            android:textAlignment="center"
            android:textColor="@color/LightBlue"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </LinearLayout>

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="0dp"
        android:layout_height="120dp"
        android:layout_weight="1"
        >
        <ImageButton
            android:src="@drawable/someDrawable"
            android:scaleType="fitCenter"
            android:background="@android:color/transparent"
            android:contentDescription="@string/descriptionContentSignal"
            android:layout_width="match_parent"
            android:layout_height="90dp"/>

        <TextView
            android:paddingTop="10dp"
            android:text="@string/SomeString"
            android:textSize="15sp"
            android:textAlignment="center"
            android:textColor="@color/LightBlue"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </LinearLayout>

</LinearLayout>

<!-- THIRD ROW -->

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="5dp">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="0dp"
        android:layout_height="120dp"
        android:layout_weight="1"
        >
        <ImageButton
            android:src="@drawable/someDrawable"
            android:scaleType="fitCenter"
            android:background="@android:color/transparent"
            android:contentDescription="@string/descriptionContentSignal"
            android:layout_width="match_parent"
            android:layout_height="90dp"/>

        <TextView
            android:id="@+id/textView2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingTop="10dp"
            android:text="@string/SomeString"
            android:textAlignment="center"
            android:textColor="@color/LightBlue"
            android:textSize="15sp"/>
    </LinearLayout>

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="0dp"
        android:layout_height="120dp"
        android:layout_weight="1"
        >
        <ImageButton
            android:src="@drawable/someDrawable"
            android:scaleType="fitCenter"
            android:background="@android:color/transparent"
            android:contentDescription="@string/descriptionContentSignal"
            android:layout_width="match_parent"
            android:layout_height="90dp"/>

        <TextView
            android:paddingTop="10dp"
            android:text="SomeString"
            android:textSize="15sp"
            android:textAlignment="center"
            android:textColor="@color/LightBlue"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </LinearLayout>

    <Space
        android:layout_width="0dp"
        android:layout_height="120dp"
        android:layout_weight="1"
        />

</LinearLayout>

<LinearLayout
    android:baselineAligned="false"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:layout_alignParentBottom="true"
    android:gravity="center"
    >

    <ImageButton
        android:id="@+id/imageButton"
        android:layout_width="150dp"
        android:layout_height="85dp"
        android:layout_gravity="bottom|center"
        android:background="@android:color/transparent"
        android:scaleType="fitCenter"
        android:src="@drawable/centralbutton"/>

    <ImageButton
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_gravity="center_vertical"
        android:background="@android:color/transparent"
        android:contentDescription="@string/accept"
        android:onClick="closeView"
        android:scaleType="fitCenter"
        android:src="@drawable/cancel"
        />
</LinearLayout>
</LinearLayout>

因此,最后一个 LinearLayout(仅包含两个 ImageButtons)不与屏幕底部对齐,而是根据屏幕大小浮动在某处。

我正在应用这种样式来获得透明背景:

    <style name="dialogStyle" parent="@android:style/Theme.Holo">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:backgroundDimEnabled">true</item>
    </style>

如果有人遇到同样的问题,我很想得到想法...... 感谢您的宝贵时间!

【问题讨论】:

  • 尝试在主布局中添加 fitSystemWindows 属性(true 或 false,不记得需要哪个)

标签: android xml android-linearlayout


【解决方案1】:

试试这个作为你最后的Linearlayout 将高度设为match parent

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="bottom"
    android:baselineAligned="false"
    android:gravity="center">

</LinearLayout>

 <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:layout_weight="1"   //add this
    android:baselineAligned="false"
    android:gravity="center">

说明:

LinearLayout 中的所有项目都占用了一些空间,请确保最后一个项目,即包裹按钮的 LinearLayout,拉伸以占据所有剩余空间。设置android:layout_weight="1"或设置高度match_parent

【讨论】:

  • 太好了,非常感谢!你能解释一下改变高度以匹配父级是如何工作的吗?
【解决方案2】:

如果您想将布局设置为底部,请使用 RelativeLayout 作为父级并相应地设置视图。或者您可以使用带权重的LinearLayout,您需要将权重1设置为中间布局,根据屏幕大小自动设置顶部和底部。

LinearLayout 的布局权重:参考https://developer.android.com/guide/topics/ui/layout/linear.html

RelativeLayout : 参考https://developer.android.com/reference/android/widget/RelativeLayout.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 2021-07-17
    • 2020-06-14
    • 2016-01-02
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多