Android对齐textview和edittext

时间:2012-08-28 12:12:18

标签: android android-layout

在下面的xml文件中。我正在尝试对齐contents.i.e,第一个textview后面跟着edittext,然后在下一行中继续。但现在紧接着,文本会相互强加,如何解决这个问题。

 <?xml version="1.0" encoding="utf-8"?>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:orientation="vertical" >


      <RelativeLayout
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:layout_weight="0.70" >



          <TextView
              android:id="@+id/hostname"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_alignBaseline="@+id/ip"
              android:layout_alignParentLeft="true"
              android:text="hostname" />


          <EditText
              android:id="@+id/ip"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_alignParentLeft="true"
              android:layout_alignParentTop="true"
              android:layout_marginLeft="39dp"
              android:ems="10"
              android:inputType="textEmailAddress" >

          </EditText>


   <TextView
              android:id="@+id/username"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_alignBaseline="@+id/ip"
              android:layout_alignBottom="@+id/ip"
              android:layout_alignParentLeft="true"
              android:text="Hostname" />
          <EditText
              android:id="@+id/username"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_alignLeft="@+id/editText1"
              android:layout_below="@+id/ip"
              android:layout_marginLeft="45dp"
              android:layout_marginTop="42dp"
              android:ems="10" />

           <TextView
              android:id="@+id/password"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_alignBaseline="@+id/hostname"
              android:layout_alignBottom="@+id/username"
              android:layout_alignParentLeft="true"
              android:text="Password" />
          <EditText
              android:id="@+id/password"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_below="@+id/password"
              android:layout_centerHorizontal="true"
              android:layout_marginTop="47dp"
              android:ems="10"
              android:inputType="textPassword" />


      </RelativeLayout>

  </LinearLayout>

6 个答案:

答案 0 :(得分:9)

另一种方法,对我来说效果很好,在您的xml文件中,添加指定<LinearLayout>的父android:orientation="horizontal"以包含您的TextView和{{1} }}

此父级EditText必须 您的第一个LinearLayout必须指定LinearLayout

android:orientation="vertical"

这是结果(警告标志是因为提示和文本的硬编码字符串......):

Result of the above

答案 1 :(得分:2)

我在尝试定位android 4.X时遇到了同样的问题。我使用android:gravity="center_vertical"

解决了这个问题
<LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:ems="10"
            android:id="@+id/itemNameLabel"
            android:text="@string/entry_item_label"
            android:textSize="@dimen/baseTextSize"
            android:layout_weight=".15"
            android:gravity="center_vertical" />

        <EditText
            android:layout_width="0dp"
            android:layout_weight=".85"
            android:layout_height="wrap_content"
            android:inputType="textPersonName"
            android:ems="10"
            android:id="@+id/itemName"
            android:textSize="@dimen/baseTextSize"
            android:hint="Food, Video Game, etc..." />
    </LinearLayout>

答案 2 :(得分:1)

您为多个视图使用相同的ID,然后多个视图使用layout_below使用相同的ID,这就是为什么有一些在彼此之上。让他们成为独特的ids。此外,您在某些align_left中使用的ID也是如此,例如editText1

简短回答:为每个视图使用唯一ID,并检查您对齐和定位的引用等。

你的下一个问题是你不应该尝试像这样分层你的观点,有一种叫做android:hint="hint text"这就是我认为你想要的东西。一旦用户开始输入文本,该文本将隐藏,但除此之外,它就像在其上面有文本视图...

答案 3 :(得分:0)

这些都没有解决我的问题。我做的是我添加 android:textAlignment="center"到XML中的textView。编辑文本默认居中。

TextViewEditText都是水平LinearLayout

答案 4 :(得分:0)

将此属性添加到EditText:

android:layout_below="@+id/hostname"

答案 5 :(得分:-7)

最佳方法是删除所有textview并设置andoid:hint以编辑文字。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/ip"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:ems="10"
        android:hint="HostName"
        android:inputType="textEmailAddress" >
    </EditText>

    <EditText
        android:id="@+id/username"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="HostName" />

    <EditText
        android:id="@+id/password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="Password"
        android:inputType="textPassword" />

</LinearLayout>

enter image description here