【问题标题】:RelativeLayout align Textview and EdittextRelativeLayout 对齐 Textview 和 Edittext
【发布时间】:2015-12-11 14:30:39
【问题描述】:

我想使用RelativeLayout 水平对齐一个textview,然后是一个edittext,然后是一个textview,然后是一个edittext。我知道你可以用 LinearLayout 来做到这一点,但我想用 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="wrap_content">

    <TextView
        android:id="@+id/userNameLbl"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Username:"
        android:layout_alignParentLeft="true" />
    <EditText
        android:id="@+id/userNameText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/userNameLbl"
        android:minWidth="200dp"
        android:text="Sample Text" />
    <TextView
        android:id="@+id/pwdLbl"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Password:"
        android:layout_toRightOf="@+id/userNameText"
        android:layout_toEndOf="@+id/userNameText" />
    <EditText
        android:id="@+id/userNameText2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/pwdLbl"
        android:minWidth="200dp"
        android:text="Sample Text" />
 </RelativeLayout>

但它不起作用。所有的控件(edittextstextviews)都放在一起!我的代码有什么问题?我使用layout_toRightOf 将它们放在一起。 并且因为它被提及,所以控件有足够的位置。 这也是设计师的照片,它的样子:

【问题讨论】:

  • 在你的布局中使用 android:orientation="horizo​​ntal"
  • 原因是你的文本视图和编辑文本不能放在一行中。所以你可以使用 Horizo​​ntalScrollView。
  • 作为旁注,我注意到您在一个 TextView 中使用了“toEndOf”,将它用于您的 EditText 也是一个好习惯。另外,在第一个中添加“alignParentStart=true”。这只是为了帮助支持左右布局。
  • 而且,除了句法方面的东西,fill_parent 已被弃用,我会将其更改为 'match_parent'

标签: android xml android-layout xamarin xamarin-studio


【解决方案1】:

我复制了您的代码只是为了查看确切的问题,但一切看起来都很好。然而,由于空间问题,最后一个 EditText 在右侧狭窄。 你确定你有足够的空间让所有东西都放得下吗?

如果空间太小,视图可能会相互挤在一起。

【讨论】:

  • 我认为这也会发生。我无法测试它,但 XML 对我来说看起来不错。
  • @Eomer 我编辑了我的问题并粘贴了一张图片给你看设计师。控件绝对有足够的空间。
  • @MoProg 那是个什么样的设计师?我从来没有见过。你试过在物理设备上运行吗?
  • @McAdam331 它是通过 Xamarin Studio for Android 构建的。但你是对的。问题出在设计师身上。当我在设备上运行应用程序时,它工作正常,但 Xamarin Studio 的设计者呈现错误
  • @MoProg 我很高兴它能正常工作。出于好奇,您为什么选择 Xamarin Studio 而不是 Android Studio?
【解决方案2】:

当您仔细观察时,在 android:layout_toRightOfandroid:layout_toEndOf 属性中,您使用的是 @+id/... 值。删除 + 以引用现有资源项。

【讨论】:

  • 我认为 OP 不是垂直组,而是水平组。
  • 你说得对,我重新考虑了这个问题并编辑了答案
【解决方案3】:

好的,问题似乎出在 Xamarin Studio 本身,它没有正确呈现布局的内容。因为当我在设备上运行此布局时,控制器彼此相邻放置并没有这样的问题,但设计者显示它完全不同。

【讨论】:

    【解决方案4】:

    试试这个代码,它会根据你的需要对齐:

      <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:orientation="horizontal"
        android:layout_height="match_parent">
    
            <TextView
                android:id="@+id/userNameLbl"
                android:layout_width="0dp"
                android:layout_weight="0.25"
                android:layout_height="wrap_content"
                android:text="Username:" />
            <EditText
                android:id="@+id/userNameText"
                android:layout_width="0dp"
                android:layout_weight="0.25"
                android:layout_height="wrap_content"
    
                android:minWidth="200dp"
                android:text="Sample Text" />
    
    
    
    
            <TextView
                android:id="@+id/pwdLbl"
                android:layout_width="0dp"
                android:layout_weight="0.25"
                android:layout_height="wrap_content"
                android:text="Password:"
    
                />
            <EditText
                android:id="@+id/userNameText2"
                android:layout_width="0dp"
                android:layout_weight="0.25"
                android:layout_height="wrap_content"
    
    
                android:minWidth="200dp"
                android:text="Sample Text" />
    
    
    </LinearLayout>
    

    如果您需要更多信息,请在下方评论

    【讨论】:

    • 我认为 OP 不是垂直组,而是水平组。
    • 没有提供截图,因此我已经更正了代码以标准方式显示,因为屏幕是登录屏幕,我觉得将用户名和密码字段显示在彼此下方是有意义的跨度>
    • @Manikanta 不,我不想将布局放在彼此下方。但即使使用这段代码,当我运行它时,我也会遇到同样的问题,并且每个布局中的控件都是相互放置的
    • 所以您希望用户名和密码的标签和文本字段并排显示?