2015-07-29 2 views
6

Изображение говорит больше, чем длинная речь: enter image description hereAndroid - Выровнять вид центр донизу другого вида

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

Я попробовал Посмотреть с высотой 0dp выравнивается по нижней части черного зрения и alignBaseline красного зрения на него, но он не работает ...

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

+1

Используйте FrameLayout как родительский элемент, а затем установите силу тяжести на дно. В ребенке установить верхнюю границу до высоты ребенка/2 – vilpe89

ответ

3

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

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

г. Схема:

 <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); 
       } 
      }); 

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

+0

Amazing !! Я боролся с тех пор, чтобы сосредоточить изображение (маркер) на карте, это решение помогло мне достичь этого! – Ishaan

0

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

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

удачи :)

0
<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" /> 
0

Здесь я использую две разные 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 к отрицательной половине его высоты. Таким образом, центр красного контейнера находится на дне черного контейнера.

+0

не работает для меня –

0

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

<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> 
14

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, якорь будет сохраняться, а также.

+2

Это действительно лучший ответ. CoordinatorLayout позволяет точно размещать представления, которые JosselinTD пытается достичь. – Luke

+0

Спасибо большое! 'КоординаторLayout' скалы! :) –

+0

спасатель. Спасибо – RATHI

Смежные вопросы