【问题标题】:Centering EditText views in a RelativeLayout在 RelativeLayout 中居中 EditText 视图
【发布时间】:2016-01-20 04:16:03
【问题描述】:

如果您注意到电子邮件和密码的 EditText 视图,则该行未居中。在 Android Studio 的设计和预览模式中,它们看起来是居中的,但是当我在手机上运行它时,就会出现这种情况。我很难让它居中。这是我目前的代码:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center_horizontal">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="@string/email"
        android:id="@+id/emailTextLabel"
        android:layout_marginTop="42dp"
        android:layout_alignParentTop="true"
        android:layout_alignLeft="@+id/passwordTextLabel"
        android:layout_alignStart="@+id/passwordTextLabel"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="@string/password"
        android:id="@+id/passwordTextLabel"
        android:layout_marginLeft="27dp"
        android:layout_marginStart="27dp"
        android:layout_marginTop="50dp"
        android:layout_below="@+id/emailTextLabel"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"/>

    <EditText
        android:layout_width="325dp"
        android:layout_height="wrap_content"
        android:inputType="textEmailAddress"
        android:ems="10"
        android:id="@+id/emailEditText"
        android:layout_below="@+id/emailTextLabel"
        android:layout_alignLeft="@+id/emailTextLabel"
        android:layout_alignStart="@+id/emailTextLabel"/>

    <EditText
        android:layout_width="325dp"
        android:layout_height="wrap_content"
        android:inputType="textPassword"
        android:ems="10"
        android:id="@+id/passwordEditText"
        android:layout_below="@+id/passwordTextLabel"
        android:layout_alignLeft="@+id/passwordTextLabel"
        android:layout_alignStart="@+id/passwordTextLabel"/>

    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/keep_me_signed_in"
        android:id="@+id/keepMeSignedInCheckBox"
        android:layout_below="@+id/passwordEditText"
        android:layout_alignLeft="@+id/passwordEditText"
        android:layout_alignStart="@+id/passwordEditText"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/sign_in"
        android:id="@+id/sign_in_button"
        android:layout_alignTop="@+id/sign_up_button"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginLeft="90dp"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/sign_up"
        android:id="@+id/sign_up_button"
        android:layout_marginTop="40dp"
        android:layout_below="@+id/keepMeSignedInCheckBox"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_marginRight="90dp"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/use_without_account"
        android:id="@+id/use_without_account_button"
        android:layout_marginTop="8dp"
        android:layout_below="@+id/sign_in_button"
        android:layout_centerHorizontal="true"/>

</RelativeLayout>

【问题讨论】:

    标签: android xml android-relativelayout


    【解决方案1】:

    EditText宽度设置为match_parent并从左右给margin,并删除android:layout_alignLeftandroid:layout_alignStart

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textEmailAddress"
        android:ems="10"
        android:layout_marginLeft="27dp"
        android:layout_marginRight="27dp"
        android:id="@+id/emailEditText"
        android:layout_below="@+id/emailTextLabel"/>
    

    【讨论】:

    • 谢谢!这行得通。我不知道为什么我没有想到这样做哈哈。
    • 用边距居中视图是非常非常非常糟糕的做法。
    • @P.Ilyin 是的,我知道,但我已经根据 OP 的问题给出了答案。
    • @P.Ilyin 那么更好的做法是什么?我是 android 编程新手,想知道更好的方法。
    • 更好地使用 XML 元素的特殊属性。大多数视图都有 android:layout_centerHorizo​​ntal 属性,用于在 relativeLayout 中居中。在此答案下方查看我的答案
    【解决方案2】:

    使用 android:layout_centerHorizo​​ntal="true" 是居中视图的最佳解决方案

            <EditText
                android:id="@+id/note_title"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_centerHorizontal="true"
                android:hint="Тема"
                android:paddingLeft="10dp"
                android:paddingRight="10dp"
                android:textCursorDrawable="@null"/>
        </RelativeLayout>
    

    【讨论】:

    • 这是一个很好的解决方案,我试过了,它可以工作。不知道为什么它被否决了。
    • @RRR 他将使用其他好的解决方案:为不同的显示尺寸创建维度资源
    • @RRR 我确实考虑过,这就是我使用您的解决方案的原因:]
    猜你喜欢
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多