Android 将TextView中心水平和底部与父对象对齐
在这个布局中,我有两个视图-右下角的ImageButton和中下角的TextView。当两个视图的android:visibility设置为visible时,所有视图都会根据需要对齐。但是,如果我将android:visibility for ImageButton设置为gone-EditText,它将位于布局的左边缘 问题: 1为什么会发生这种情况 2如何实现在将ImageButton可见性设置为gone时不更改EditText的位置?我需要得到与左图相同的布局,见下图,但没有ImageButton。我知道,一种可能是将visibility设置为“不可见”,而不是“不可见”,但我对visibility=gone的解决方案更感兴趣 注:前两个布局——RelativeLayout和FrameLayout是强制性的——它们用于其他内容,我刚刚删除了所有与问题无关的内容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
<?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>
是的,问题出在框架布局上。谢谢是的,问题出在框架布局上。谢谢