Как выровнять центр коробки с левым краем другой коробки?

Изображение того, что я хочу сделать

Я хочу выровнять центр меньшего красного прямоугольника по левому краю черного поля. У красного поля ширина и высота установлены на wrap_content, а внутри есть текстовое представление. Черный ящик занимает половину ширины экрана. Он имеет линейную компоновку с проставками слева и справа, проставки имеют вес 0,25, а черный ящик имеет вес 0,5.

Я бы предпочел сделать это в XML без использования полей. Красное поле может содержать 2 символа или 20, содержимое поступает с сервера.

Есть только toLeftOf и alignLeft. По сути, я хочу «выровнять центр блока по левому краю другого блока».


person Joe Android    schedule 11.02.2016    source источник


Ответы (2)


Вот простая реализация того, что вы хотите, используя только XML.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
    android:layout_width="100dp"
    android:layout_height="50dp"
    android:id="@+id/imageView"
    android:background="#000000"
    android:layout_marginLeft="50dp" />
<ImageView
    android:layout_width="50dp"
    android:layout_height="25dp"
    android:id="@+id/imageView2"
    android:background="#ff0000"
    android:layout_marginTop="-40dp"
    android:layout_marginLeft="25dp" />

person Samnon    schedule 11.02.2016
comment
При этом используются поля, подразумевающие, что размер известен заранее. - person Joe Android; 11.02.2016
comment
Текст, который будет в полях, может состоять из 2 или 20 символов, я не могу использовать поля. - person Joe Android; 11.02.2016
comment
Можете ли вы опубликовать копию вашего текущего XML, я могу основывать свой ответ на этом. - person Samnon; 11.02.2016

Вы можете попробовать этот xml для своих целей. Но вам нужен центр черного ящика с динамическим содержимым, но это не рекомендуется, причина в том, что если контент слишком длинный или слишком короткий, он не будет хорошо выглядеть в пользовательском интерфейсе, потому что вы хотите динамически поддерживать ширину красного поля, а также центр левого края тоже. Так что размер черного ящика тоже нужно менять каждый раз. Это не хорошо. Пожалуйста, попробуйте мое решение, и вы всегда можете изменить этот макет в соответствии с вашим мыслительным процессом.

<?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">

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


        <View
            android:id="@+id/view_1"
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:layout_marginLeft="50dp"
            android:layout_marginRight="50dp"
            android:background="#000000" />


        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@id/view_1"
            android:layout_centerVertical="true"
            android:background="#ff0000">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="10dp"
                android:text="Hi"
                android:textColor="#ffffff" />


        </RelativeLayout>

    </RelativeLayout>
</RelativeLayout>

Надеюсь, это поможет вам!

person Rahul    schedule 11.02.2016