如何在线性布局中让EditText居中?

6
我正在尝试在线性布局中垂直和水平居中一个编辑框,但是它没有起作用。这实际上是一个非常简单的问题。
 <?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" 
 android:background="@drawable/login">



<EditText
    android:layout_width="150dp"
    android:layout_height="wrap_content"
    android:background="@drawable/loginbutton"
    android:text="Username"
    android:layout_gravity="center"
    android:textSize="25dp"
    android:gravity="center_horizontal|center_vertical"
    android:textColor="#000000"
    android:layout_margin="10dp"
    android:id="@+id/username">
  </EditText>

我会尝试在这段时间内切换到RelativeLayout。

4个回答

12
据我所知,LinearLayout 不支持在其堆叠项目的方向上居中。除非 LinearLayout 非常关键(在您的情况下不应该是这样,因为您还需要居中),否则建议您切换到 RelativeLayout
使用 RelativeLayout,您可以在 EditText 上设置属性 android:layout_centerInParent="true" 以使其居中。

现在我该如何将这三个控件居中显示?因为我只能将其中一个居中,然后将另外两个放在它下面,但是看起来很奇怪。我需要将这三个控件都居中,就像它们在一个视图中一样,并将该视图居中于父视图中。你有什么想法吗? - codesomethin
1
将其中一个居中,然后在另外两个上下方使用水平居中标签。 - blindstuff
我只居中了一个,看起来是这样的... 我需要将所有三个作为整体居中,以便用户名到顶部和登录按钮到底部的距离相等。http://www.freeimagehosting.net/ktxbp - codesomethin
在您的屏幕截图中,'username' 看起来是居中显示的视图,如果您将 '....' 居中显示,并将 'username' 放在它上面(layout_above),并将 'Login' 放在下面(layout_below)。如果这还不够精确,您可以按照您暗示的方式做;将所有视图放在一个垂直 LinearLayout 中,该 LinearLayout 在 RelativeLayout 中,并在 LinearLayout 上设置 centerInParent="true"。 - Jave

1

使用重力会影响 UI 元素内部内容的重心,这意味着(在此情况下)EditText 中的文本将居中显示。为了使 UI 元素本身居中,您需要定义 layout_gravity,因为这是 UI 元素在其父元素中所占据的重心。OP 发布的代码可以实现水平居中,但无法实现垂直居中。

作为替代方案,您可以使用 RelativeLayout。

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

<EditText
    android:id="@+id/username"
    android:layout_width="150dp"
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    android:background="@drawable/loginbutton"
    android:layout_centerInParent="true"
    android:text="Username"
    android:textColor="#000000"
    android:textSize="25dp" >
</EditText>

</RelativeLayout>

1
很简单,只需在线性布局中添加android:gravity="center"即可。
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
>

-1

试试这个:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical" 
 android:background="@drawable/login"
 android:layout_centerVertical="true"
 android:layout_centerInParent="true">

那段代码没有起作用。我应该在EditText中添加这2行吗? - codesomethin
你可以尝试一下,也可以尝试添加'android:layout_gravity="center_horizontal|center_vertical"'。 - Vic Vuci
1
android:layout_centerVertical="true" android:layout_centerInParent="true" 用于相对布局中,如果在线性布局中设置这些属性是不会起作用的。 - blindstuff
哦,太酷了,你知道的越多。我使用了上面的代码来进行布局,目前还能正常运行,但这可能只是我的运气好。 - Vic Vuci

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接