如何将 TextView 与 EditText 堆叠在同一行(堆叠几行)

How to stack TextView's on same line with EditText's (stack a couple of rows)

所以我试图在 LinearLayout 中堆叠几行 TextView 和 EditText(每行在同一行)。但我设法只使用第一对 TextView 和 EditText 来做到这一点。我只是不知道如何进入下一行。

XML:

<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: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.example.mylifeinformationsharedsocial.SignUpActivity" >

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/username_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/username_text"
        android:textSize="20sp"
        android:gravity="start"
        />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/username_edit_text_id"
        android:hint="@string/username_hint_texts"
        android:gravity="end"
        />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/password_id"
        android:text="@string/password_text"
        android:textSize="20sp"
        />

    <EditText
        android:id="@+id/password_edit_text_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textPassword"
        android:hint="@string/passworde_hint_texts"
        />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/email_id"
        android:text="@string/email_text"
        android:textSize="20sp"
        />

    <EditText
        android:id="@+id/email_edit_text_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textEmailAddress"
        android:hint="@string/email_hint_text"
        />

    <Button
        android:id="@+id/sign_up_button_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/sign_up_button_text" 
        />
</LinearLayout>

图片:

你可以看到我看不到其他 TextView 和 EditText,那么我如何向下一行,使密码字段在第 2 行,电子邮件字段在第 3 行,按钮在第 4 行线?

试试这个

<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="horizontal"
tools:context="com.example.mylifeinformationsharedsocial.SignUpActivity" >

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/username_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/username_text"
        android:textSize="20sp"
        android:gravity="start"
        />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/username_edit_text_id"
        android:hint="@string/username_hint_texts"
        android:gravity="end"
        />
</LinearLayout>

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/password_id"
        android:text="@string/password_text"
        android:textSize="20sp"
        />

    <EditText
        android:id="@+id/password_edit_text_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textPassword"
        android:hint="@string/passworde_hint_texts"
        />
</LinearLayout>
<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/email_id"
        android:text="@string/email_text"
        android:textSize="20sp"
        />

    <EditText
        android:id="@+id/email_edit_text_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textEmailAddress"
        android:hint="@string/email_hint_text"
        />
</LinearLayout>
    <Button
        android:id="@+id/sign_up_button_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/sign_up_button_text" 
        />
</LinearLayout>

您在 other question 的评论中说您想使用 LinearLayout。如果是这样,您可以 将多个 horizontal 线性布局包裹在 vertical 线性布局 中,如下所示:

(请参阅下面的基于 TableLayout 的解决方案)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    >
  <LinearLayout
      android:orientation="horizontal"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:layout_weight="1"
      >
     <TextView
        android:id="@+id/username_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/username_text"
        android:textSize="20sp"
        android:gravity="start"
        />
    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/username_edit_text_id"
        android:hint="@string/username_hint_texts"
        android:gravity="end"
        />
  </LinearLayout>
  <LinearLayout
      android:orientation="horizontal"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/password_id"
        android:text="@string/password_text"
        android:textSize="20sp"
        />
    <EditText
        android:id="@+id/password_edit_text_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textPassword"
        android:hint="@string/passworde_hint_texts"
        />
  </LinearLayout>
  <LinearLayout
      android:orientation="horizontal"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      >
   <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/email_id"
        android:text="@string/email_text"
        android:textSize="20sp"
        />
    <EditText
        android:id="@+id/email_edit_text_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textEmailAddress"
        android:hint="@string/email_hint_text"
        />
  </LinearLayout>
  <LinearLayout
      android:orientation="horizontal"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      >
    <Button
        android:id="@+id/sign_up_button_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/sign_up_button_text" 
        />
  </LinearLayout>
</LinearLayout>

如果您想改用 TableLayout(渲染速度可能更快 并且 字段对齐),请使用

<?xml version="1.0" encoding="utf-8"?>
  <TableLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    >
  <TableRow>
         <TextView
            android:id="@+id/username_id"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/username_text"
            android:textSize="20sp"
            android:gravity="start"
            />
        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/username_edit_text_id"
            android:hint="@string/username_hint_texts"
            android:gravity="end"
            />
    </TableRow>
    <TableRow>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/password_id"
            android:text="@string/password_text"
            android:textSize="20sp"
            />
        <EditText
            android:id="@+id/password_edit_text_id"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:inputType="textPassword"
            android:hint="@string/passworde_hint_texts"
            />
    </TableRow>
    <TableRow>
       <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/email_id"
            android:text="@string/email_text"
            android:textSize="20sp"
            />
        <EditText
            android:id="@+id/email_edit_text_id"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:inputType="textEmailAddress"
            android:hint="@string/email_hint_text"
            />
    </TableRow>
    <TableRow>
        <Button
            android:id="@+id/sign_up_button_id"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/sign_up_button_text" 
            />
    </TableRow>
  </TableLayout>

您只使用了一个 LinearLayout,它会导致所有文本视图和 EditText 仅绘制在一行中。

不要使用 RelativeLayout(如果只放置一个视图或一个视图组,请不要使用 RelativeLayot,这是非常低效的,请改用 FrameLayout)使用类似的东西:

<TextView
    android:id="@+id/username_id"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/username_text"
    android:textSize="20sp"
    android:gravity="start"
    />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/username_edit_text_id"
    android:hint="@string/username_hint_texts"
    android:gravity="end"
    />
</LinearLayout>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/password_id"
    android:text="@string/password_text"
    android:textSize="20sp"
    />

<EditText
    android:id="@+id/password_edit_text_id"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="textPassword"
    android:hint="@string/passworde_hint_texts"
    />
</LinearLayout>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/email_id"
        android:text="@string/email_text"
        android:textSize="20sp"
        />

    <EditText
        android:id="@+id/email_edit_text_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textEmailAddress"
        android:hint="@string/email_hint_text"
        />
</LinearLayout>

<Button
    android:id="@+id/sign_up_button_id"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/sign_up_button_text" 
    />

您可以使用嵌套的 LinearLayout(一个垂直方向有很多 LinearLayout 水平方向)来做到这一点。但是在 Android 中不鼓励嵌套 ViewGroup(它会减慢 UI)。

您也许可以使用 GridView, GridLayout or TableLayout