Android 将TextView中心水平和底部与父对象对齐

Android 将TextView中心水平和底部与父对象对齐,android,xml,android-layout,android-relativelayout,Android,Xml,Android Layout,Android Relativelayout,在这个布局中,我有两个视图-右下角的ImageButton和中下角的TextView。当两个视图的android:visibility设置为visible时,所有视图都会根据需要对齐。但是,如果我将android:visibility for ImageButton设置为gone-EditText,它将位于布局的左边缘 问题: 1为什么会发生这种情况 2如何实现在将ImageButton可见性设置为gone时不更改EditText的位置?我需要得到与左图相同的布局,见下图,但没有ImageBut

在这个布局中,我有两个视图-右下角的ImageButton和中下角的TextView。当两个视图的android:visibility设置为visible时,所有视图都会根据需要对齐。但是,如果我将android:visibility for ImageButton设置为gone-EditText,它将位于布局的左边缘

问题:

1为什么会发生这种情况

2如何实现在将ImageButton可见性设置为gone时不更改EditText的位置?我需要得到与左图相同的布局,见下图,但没有ImageButton。我知道,一种可能是将visibility设置为“不可见”,而不是“不可见”,但我对visibility=gone的解决方案更感兴趣

注:前两个布局——RelativeLayout和FrameLayout是强制性的——它们用于其他内容,我刚刚删除了所有与问题无关的内容

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

    <FrameLayout
        android:id="@+id/mForSearchFragment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@id/mForAdMediation"
        android:layout_alignWithParentIfMissing="true" >

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <EditText
                android:id="@+id/mSearchEditText"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true"
                android:ems="5"
                android:imeOptions="actionSearch"
                android:inputType="text"
                android:visibility="visible" >

                <requestFocus />
            </EditText>

            <ImageButton
                android:id="@+id/mSearchButton"
                android:layout_width="48dp"
                android:layout_height="48dp"
                android:layout_alignParentBottom="true"
                android:layout_alignParentRight="true"
                android:background="@drawable/dark_button"
                android:src="@drawable/tab_search"
                android:visibility="visible" />
        </RelativeLayout>
    </FrameLayout>

</RelativeLayout>
以下是布局:
嗯,看来我找到了解决办法:


我需要将第一个FrameLayout的布局宽度设置为与父级匹配,似乎我找到了一个解决方案:


我需要将第一个FrameLayout的布局宽度设置为与父级匹配。问题是,您的内部RelativeLayout位于设置为按宽度换行内容的FrameLayout内部。因此,当ImageView消失时,RelativeLayout的宽度缩小到EditText的宽度。因此,EditText仍然位于RelativeLayout的中心,但RelativeLayout的宽度仅与EditText相同

也许你可以简化你的布局,像这样

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

    <EditText
        android:id="@+id/mSearchEditText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:ems="5"
        android:imeOptions="actionSearch"
        android:inputType="text"
        android:visibility="visible" >

        <requestFocus />
    </EditText>

    <ImageButton
        android:id="@+id/mSearchButton"
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:background="@drawable/dark_button"
        android:src="@drawable/tab_search"
        android:visibility="visible" />

</RelativeLayout>

问题是内部RelativeLayout位于设置为按宽度换行内容的FrameLayout内部。因此,当ImageView消失时,RelativeLayout的宽度缩小到EditText的宽度。因此,EditText仍然位于RelativeLayout的中心,但RelativeLayout的宽度仅与EditText相同

也许你可以简化你的布局,像这样

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

    <EditText
        android:id="@+id/mSearchEditText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:ems="5"
        android:imeOptions="actionSearch"
        android:inputType="text"
        android:visibility="visible" >

        <requestFocus />
    </EditText>

    <ImageButton
        android:id="@+id/mSearchButton"
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:background="@drawable/dark_button"
        android:src="@drawable/tab_search"
        android:visibility="visible" />

</RelativeLayout>

是的,问题出在框架布局上。谢谢是的,问题出在框架布局上。谢谢