【问题标题】:How to stack TextView's on same line with EditText's (stack a couple of rows)如何将 TextView 与 EditText 堆叠在同一行(堆叠几行)
【发布时间】:2015-08-15 21:25:53
【问题描述】:

所以我试图在 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,只使用外部RelativeLayout。它具有对齐孩子和选择相对位置的属性(例如“下面”)。你的 LinearLayout 是水平的,所以你不能往下走。
  • @mvai 好吧,我首先使用了一个带有所有 layout_blow 和 alignToRight 的 RelativeLayout,但视图不在同一行。 stackoverflow.com/questions/32012587/…这是我用代码问的问题..

标签: java android android-layout textview android-linearlayout


【解决方案1】:

您可以使用嵌套的LinearLayout 来执行此操作(一个垂直方向,其中有很多LinearLayout 水平方向)。但在 Android 中不鼓励嵌套 ViewGroup(它会减慢 UI)。

您也许可以使用GridViewGridLayoutTableLayout

【讨论】:

【解决方案2】:

试试这个

<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>

【讨论】:

    【解决方案3】:

    您只使用了一个 LinearLayout,这会导致所有的 textview 和 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" 
        />
    

    【讨论】:

      【解决方案4】:

      您在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>
      

      【讨论】:

      • 不客气。 :-) 如果要对齐字段,请参阅显示如何执行 TableLayout 的编辑。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-02
      • 2019-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-26
      相关资源
      最近更新 更多