Android: 水平 LinearLayout 没有按预期布局元素

Android: horizontal LinearLayout does not lay out elements as expected

我创建了一个包含 EditText 和按钮的水平 LinearLayout。按钮应尽可能窄,EditText 应占据整个剩余 space。 像那样:

我写这段代码:

<LinearLayout
    android:id="@+id/textInputLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <EditText
        android:id="@+id/editTextToSpeak"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:ems="10"
        android:hint="@string/text_to_speak"
        android:inputType="text" />

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

我得到了这张照片:

按钮完全不可见,EditText的高度增加了一倍。

如何使这些元素看起来像第一张图片中的样子?

您可以通过在您的 EditText 中使用 android:layout_weight="1"android:layout_width = "0dp" 轻松存档,因此它会占用 space 除了您的按钮区域之外的其余部分。

<LinearLayout
    android:id = "@+id/textInputLayout"
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:orientation = "horizontal">

    <EditText
        android:layout_weight="1"
        android:id="@+id/editTextToSpeak"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:ems="10"
        android:hint="@string/text_to_speak"
        android:inputType="text" />

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

希望有所帮助:)

使用 android:weightSum & android:weight。它将使您能够垂直或水平固定尺寸。

<LinearLayout
android:id = "@ + id/textInputLayout"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:orientation = "horizontal"
android:weightSum="3">

<EditText
    android:id = "@+id/editTextToSpeak"
    android:layout_width ="match_parent"
    android:layout_height = "match_parent"
    android:ems = "10"
    android:hint = "@string/text_to_speak"
    android:inputType = "text"
     />

<Button
    android:id = "@+id/saveCard"
    android:layout_width = "wrap_content"
    android:layout_height = "match_parent"
    android:text = "@ string/save_card" 
    android:layout_weight="1"/>

您也可以在android中使用相对布局来实现。

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout android:layout_height="wrap_content"
    android:layout_width="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

     <EditText
        android:id="@+id/editTextToSpeak"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="@string/text_to_speak"
        android:inputType="text"
        android:layout_toStartOf="@+id/saveCard"/>

     <Button
       android:id="@+id/saveCard"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@string/save_card"
       android:layout_alignParentEnd="true"/>
</RelativeLayout>

希望对您有所帮助。)