【问题标题】:Android: Unable to align 3 views in RelativeLayoutAndroid:无法在 RelativeLayout 中对齐 3 个视图
【发布时间】:2012-04-25 05:04:30
【问题描述】:

我有以下RelativeLayout

    <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginLeft="2dp"
    android:layout_marginRight="5dp"
    android:layout_marginBottom="5dp"
    android:layout_marginTop="5dp">
        <TextView
            android:id="@+id/x_memtxtlay"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:layout_toLeftOf="@+id/x_memamtlay"
            android:textColor="#000000"
            android:textSize="22sp"
            android:paddingLeft="3dp">
        </TextView>


        <EditText
            android:id="@+id/x_memamtlay"
            android:layout_height="40dp"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_width="70dp"
            android:inputType="number"
            android:singleLine="true"
            android:paddingLeft="2dp"
            android:paddingRight="2dp"
            android:background="@drawable/edittext_greybg"
            android:visibility="gone">
        </EditText>

        <TextView
            android:id="@+id/x_memamt"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:textColor="#000000"
            android:paddingLeft="5dp"
            android:paddingRight="5dp"
            android:textSize="20sp"
            android:background="@drawable/number_fill">
        </TextView>

</RelativeLayout>

现在我必须根据某些要求在我的活动中定期将 EditText(@+id/x_memamtlay) 可见性设置为消失/可见,并将第二个 TextView(@+id/x_memamt) 可见性设置为消失/可见。EditText 或 TextView 将一次可见。

问题在于,在第一个 TextView(@+id/x_memtxtlay) 中,

当我设置 android:layout_toLeftOf="@+id/x_memamtlay" : (在 EditText 的左边)

但是当我设置 android:layout_toLeftOf="@+id/x_memamt" : (在第二个 TextView 的左边)

如何调整布局,使第一个 TextView 与 EditText 和第二个 TextView 左对齐。

【问题讨论】:

    标签: android layout android-relativelayout


    【解决方案1】:

    在你的代码中尝试这只是一个小的改动::

     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginLeft="2dp"
        android:layout_marginRight="5dp"
        android:layout_marginBottom="5dp"
        android:layout_marginTop="5dp">
            <TextView
                android:id="@+id/x_memtxtlay"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_centerVertical="true"
                android:textColor="#000000"
                android:textSize="22sp"
                android:text="sdasdasd"
                android:layout_toLeftOf="@+id/x_memlay"
                android:paddingLeft="3dp">
            </TextView>
    <FrameLayout  android:id="@+id/x_memlay"
                android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true"
                android:layout_centerVertical="true">
         <EditText
                android:id="@+id/x_memamtlay"
                android:layout_height="40dp"
    
                android:layout_width="70dp"
                android:inputType="number"
                android:singleLine="true"
                android:paddingLeft="2dp"
                android:paddingRight="2dp"
    
    
                android:visibility="gone">
            </EditText>
    
            <TextView
                android:id="@+id/x_memamt"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:textColor="#000000"
                android:paddingLeft="5dp"
                android:paddingRight="5dp"
                android:textSize="20sp"
    
            </TextView>
    </FrameLayout>
    
    
    
    </RelativeLayout>
    

    【讨论】:

    • 有效,但它使布局更加令人毛骨悚然。EdiText 和第二个 TextView 从第一个 TextView 扩展到父边框。请看一下这张图片 - i.imgur.com/cMVFb.jpg
    • 非常感谢。它现在工作得很好。你为我节省了很多时间。实际上,在 FrameLayout 的地方,我尝试了 LinearLayout 和 RelativeLayout,但没有成功。我没有得到使用 FrameLayout 的想法。
    【解决方案2】:

    在最近的几次更新中,XML 出现了一些问题。您需要输入值才能将您想要的内容一一移动到您想要的位置。

    【讨论】:

    • 这些值是在运行时设置的,所以他不能设置任何布局值。
    【解决方案3】:

    在你的代码中,你正在写的地方

          EditText.setVisibility(View.GONE);
    

          EditText.setVisibility(View.INVISIBLE);
    

    那么您不需要更改您的 XML 文件。

    【讨论】:

    • 从 Gone 更改为 Invisible 并没有反映出我的布局有任何变化。
    • 不要在 XML 文件中设置可见性。
    • 看,你保持你的 textView 与 EditText 或其他 TextView 对齐,不要将任何视图的可见性设置为 GONE。这对我有用。
    • 是的,它不仅在运行时和编译时。但在我看来,它应该可以工作!
    • 不用担心,实际上它起作用了,TextView 与 Edittext/2nd textview 左对齐。(通过将 layout_toRightOf="@+id/x_memtxtlay" 设置为 Edittext 和 2nd TextView - 请参阅 Agarwal 评论)。但是出现了另一个问题,EdiText 和第二个 TextView 从第一个 TextView 扩展到父边框。请看一下这张图片 - i.imgur.com/cMVFb.jpg