Android – выровняйте центр просмотра в нижней части другого вида

Картина говорит более чем длинную речь: Введите описание изображения здесь

Я хочу выровнять по вертикали центр красной части с серединой черной части. У меня нет ограничений на контейнер (RelativeLayout, FrameLayout, LinearLayout oO).

Я попробовал View с высотой 0dp, выровненной в нижней части черного вида, и выровнял Baseline с красным представлением, но он не работает …

Спасибо за вашу помощь !

Android теперь поддерживает привязки компоновки с помощью CoordinatorLayout :

 <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <View android:id="@+id/black_view" android:layout_width="match_parent" android:layout_height="@dimen/black_height"/> <View android:id="@+id/red_view" android:layout_width="@dimen/red_width" android:layout_height="@dimen/red_height" app:layout_anchor="@id/black_view" app:layout_anchorGravity="bottom|center"/> </android.support.design.widget.CoordinatorLayout> 

Если вы измените размер просмотров в Java-коде, якорь будет сохраняться.

Наконец, я использую более программный способ решения этой проблемы, поскольку размер Views не фиксирован.

Здесь решение:

Расположение :

  <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <View android:id="@+id/black" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true"/> <View android:id="@+id/red" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true"> </RelativeLayout> 

Код :

  red.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { red.getViewTreeObserver().removeOnGlobalLayoutListener(this); LayoutParams params = new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT ); params.setMargins(0, 0, 0, red.getHeight()/2); black.setLayoutParams(params); } }); 

Спасибо за вашу помощь ! Это помогает мне найти это!

Попробуйте 2 взгляда в относительном расположении. Поставьте 1 ниже другого (используя свойство ниже). Также сделайте их как layout_centerHorizontal = true.

U может сделать отрицательную прокладку на нижнюю, чтобы поднять ее поверх верхней.

удачи 🙂

 <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="25dp" android:background="#EEFFFFFF" android:orientation="vertical"> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp" android:layout_alignParentBottom="true" /> 

Здесь я использую два разных View как черный и красный.

 <?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"> <View android:layout_width="match_parent" android:layout_height="300dp" android:background="@android:color/black" android:id="@+id/blackContainer" /> <View android:layout_width="match_parent" android:layout_height="100dp" android:background="@android:color/holo_red_light" android:layout_below="@+id/blackContainer" android:layout_marginTop="-50dp"/> </RelativeLayout> 

Фокус в том, что я поставил красный контейнер под черный контейнер и установил его marginTop на отрицательную половину его высоты. Таким образом, центр красного контейнера находится на дне черного контейнера.

Попробуйте сделать наоборот. Сначала закрепите меньший вид и соответствующим образом поместите другой вид. Что-то вроде этого:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <View android:layout_width="100dp" android:layout_height="200dp" android:layout_centerHorizontal="true" android:layout_alignBottom="@+id/anchor" android:background="@color/black" /> <View android:layout_width="80dp" android:layout_height="50dp" android:layout_centerInParent="true" android:background="@color/light_grey"/> <View android:id="@+id/anchor" android:layout_centerInParent="true" android:layout_width="0dp" android:layout_height="0dp"/> </RelativeLayout>