【问题标题】:Glitch with linear layout inside gridview when in landscape orientation横向时gridview内的线性布局出现故障
【发布时间】:2025-12-31 05:05:13
【问题描述】:

我遇到了布局故障。我对纵向和横向有不同的布局。 问题仅出现在横向布局上,即使两者中的 xml 相同。

This image shows the problem

问题发生在 GridView 行内部。在行中,我有这些控件:
TextView1 ImageButton1 TextView2 Textview3 EditText ImageButton2 Imagebutton3

我正在使用布局权重让 TextView2、TextView3 和 EditText 控件占据剩余空间。

纵向布局和横向布局的区别在于: 纵向布局是 4 个不同部分的垂直堆叠。横向是一个分割,屏幕左侧有两个部分,右侧有两个。

这是 GridView 行的代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="5dp">

    <TextView
        android:id="@+id/gridfield_MemoryOrdinalPosition"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:text="1"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="#ff6e807c"
        android:textStyle="bold"
        android:gravity="center_vertical"
        android:layout_marginRight="5dp"></TextView>

    <ImageButton
        android:id="@+id/btnGoMemoryPosition"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="@dimen/activity_horizontal_margin"
        android:background="@mipmap/go_arrow" />

        <TextView
            android:id="@+id/gridfield_MemoryLiftPosition"
            android:layout_weight="1"
            android:text="0.00"
            style="@style/MemoryLiftPositionStyle"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:minWidth="150dp"
            android:gravity="center_vertical|end" />

        <TextView
            android:id="@+id/gridfield_MemoryLiftPositionUnits"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:gravity="center_vertical|start"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textColor="#ff2d2eff"
            android:text="in"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
        />

        <EditText
            android:id="@+id/gridfield_MemoryName"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="3"
            android:layout_marginEnd="@dimen/activity_horizontal_margin"
            android:background="@drawable/rect_text_edit"
            android:text="Named location"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="@android:color/black"
            android:textCursorDrawable="@null"
            android:layout_marginTop="5dp"
            android:layout_marginBottom="5dp"/>


    <ImageButton
        android:id="@+id/btnSetMemoryPosition"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@mipmap/save"
        android:contentDescription="Save" />

    <ImageButton
        android:id="@+id/btnClearMemoryPosition"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@mipmap/trash"
        android:contentDescription="Delete" />

</LinearLayout>

【问题讨论】:

    标签: android android-layout gridview android-linearlayout android-layout-weight


    【解决方案1】:

    activity_horizontal_margin 的值在横向上可能不同。 默认情况下,纵向为 16dp,横向为 64dp。

    【讨论】:

    • 非常感谢!我是 Android 新手,从没想过边距值会因方向而异。现在我知道要注意这一点。我花了很长时间尝试其他事情,应该早点问,但我非常感谢您快速准确的回复。