Как настроить весовую сумму для горизонтального разрыва между relativelayout

#android #xml #android-layout

#Android #xml #android-макет

Вопрос:

У меня есть один Framelayout внутри, в котором у меня есть Linealayout, весовая сумма которого 5.1 внутри, у нас есть 5 макетов, я хочу отрегулировать горизонтальный разрыв, каждый из которых основан на некотором соотношении (27:51:48:48:48:24) слева направо так, чтобы это было так, но не фиксировалось. как это исправить?

я пробовал с layout_weight 1,.9,.9,.8,1 , но это не фиксирует это соотношение, а пользовательский интерфейс не фиксирует мое соотношение горизонтального разрыва.

 <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@ id/bb_bottom_bar_outer_container"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:background="@drawable/float_common"
    android:clickable="true">

    <LinearLayout
        android:id="@ id/btn_updatenow"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white"
        android:orientation="horizontal"
        android:weightSum="5.1">

        <RelativeLayout
            android:id="@ id/float_layout_home"
            android:layout_width="@dimen/dp0"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="?attr/selectableItemBackground"
            android:orientation="vertical"
            android:paddingTop="2dp">

            <ImageView
                android:id="@ id/float_image_home"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="@dimen/margin_6"
                android:background="@drawable/float_home__new_click" />

            <TextView
                android:id="@ id/float_text_home"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true"
                android:layout_marginBottom="@dimen/padding_7"
                android:letterSpacing="-0.05"
                android:text="@string/home"
                android:textColor="@color/text_mid_grey" />
        </RelativeLayout>

        <RelativeLayout
            android:id="@ id/float_layout_collect"
            android:layout_width="@dimen/dp0"
            android:layout_height="match_parent"
            android:layout_weight=".9"
            android:background="?attr/selectableItemBackground"
            android:orientation="vertical"
            android:paddingTop="2dp">

            <ImageView
                android:id="@ id/float_image_collect"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="@dimen/margin_6"
                android:background="@drawable/float_collect_new_click" />

            <TextView
                android:id="@ id/float_text_collect"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true"
                android:layout_marginBottom="@dimen/padding_7"
                android:letterSpacing="-0.05"

                android:text="@string/collect_tab_title"
                android:textColor="@color/text_mid_grey" />
        </RelativeLayout>

        <RelativeLayout
            android:id="@ id/float_layout_offers"
            android:layout_width="@dimen/dp0"
            android:layout_height="match_parent"
            android:layout_weight=".9"
            android:background="?attr/selectableItemBackground"
            android:gravity="center"
            android:orientation="vertical"
            android:paddingTop="2dp">

            <ImageView
                android:id="@ id/float_offers"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="@dimen/margin_6"
                android:background="@drawable/float_offercoupons_new_click" />

            <TextView
                android:id="@ id/txt_badge"
                style="@style/Typeface.Footnote.White"
                android:layout_width="18dp"
                android:layout_height="18dp"
                android:layout_gravity="top|right"
                android:layout_marginLeft="-5dp"
                android:layout_marginTop="3dp"
                android:layout_toRightOf="@ id/float_offers"
                android:background="@drawable/badge_background"
                android:gravity="center"
                android:visibility="gone" />

            <TextView
                android:id="@ id/float_text_offers"
                style="@style/Typeface.Small.TextMidGrey"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true"
                android:layout_marginBottom="@dimen/padding_7"
                android:gravity="center"
                android:letterSpacing="-0.05"
                 />
        </RelativeLayout>

        <RelativeLayout
            android:id="@ id/float_layout_voucher"
            android:layout_width="@dimen/dp0"
            android:layout_height="match_parent"
            android:layout_weight=".8"
            android:background="?attr/selectableItemBackground"
            android:gravity="center"
            android:orientation="vertical"
            android:paddingTop="2dp"
            android:visibility="visible">

            <ImageView
                android:id="@ id/float_voucher"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="@dimen/margin_6"
                android:background="@drawable/float_myimage_new_click" />

            <TextView
                android:id="@ id/float_text_voucher"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true"
                android:layout_marginBottom="@dimen/padding_7"
                android:letterSpacing="-0.05"
                android:text="@string/vouchers"
                android:textColor="@color/text_mid_grey" />
        </RelativeLayout>

        <RelativeLayout
            android:id="@ id/float_layout_boost"
            android:layout_width="@dimen/dp0"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="?attr/selectableItemBackground"
            android:gravity="center"
            android:orientation="vertical"
            android:paddingTop="2dp"
            android:visibility="visible">

            <ImageView
                android:id="@ id/float_boost"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="@dimen/margin_6"
                android:background="@drawable/float_image2_new_click" />

            <TextView
                android:id="@ id/float_text_boost"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true"
                android:layout_marginBottom="@dimen/padding_7"
                android:letterSpacing="-0.05"
                android:text="@string/boost"
                android:textColor="@color/text_mid_grey" />
        </RelativeLayout>

    </LinearLayout>

</FrameLayout>
 

Я хочу сохранить горизонтальное соотношение, чтобы мой пользовательский интерфейс выглядел как на экране ниже

введите описание изображения здесь

Комментарии:

1. атрибут «android: weightSum» используется для установки общего веса. итак, если вы укажете это в родительском линейном макете, то веса его дочернего представления должны суммироваться с предоставленной weightSum.

2. да, я пытался с тем же, но не смог получить результат, как я показываю вам на прилагаемом снимке экрана, не могли бы вы предложить?

3. здесь общий вес вашего дочернего представления равен 4,6, а вы указали значение weightSum равным 5,1. вот почему ваш вид не соответствует ожидаемому.

4. итак, если я применю 4.6, тогда это сработает?

5. если вы установите его как 4.6, то ваш вид будет соответствовать полной ширине.

Ответ №1:

У вас проблема с вашим весом, но вы столкнетесь с другой проблемой: вы говорите, что ваш относительный макет принимает вес за ширину, но внутри вы помещаете содержимое wrap в свой элемент.

Это пример, если ваша общая ширина равна 1000dp, и вы присваиваете вес элементу внутри вашего контейнера, допустим, ширина вашего элемента равна 100dp с рассчитанным весом, но ваше изображение занимает 120dp с wrap_content, вы видели проблемы?

Позвольте мне показать вам это небольшое решение, которое я написал

  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="246">

    <Space
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="27" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="text1" />
    </LinearLayout>

    <Space
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="51" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="text2" />
    </LinearLayout>

    <Space
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="48" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="text3" />
    </LinearLayout>

    <Space
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="48" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="text4" />
    </LinearLayout>

    <Space
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="48" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="text5" />
    </LinearLayout>

    <Space
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="24" />
</LinearLayout>
 

В этом коде вес зависит только от пробела между элементами точно так же, как ваш рисунок, каждый элемент между пробелами может переносить его содержимое

Комментарии:

1. Спасибо за ответ, позвольте мне проверить.

2. используя этот код, я не могу видеть изображение и текст. @Vodet

3. Вы добавили android: текст и изображение src для ImageView?

4. Я добавил android: background =»@drawable / float_home__new_click» ни текст, ни изображение не отображаются вверху, я использую макет рамки @Vodet

5. Для вашего изображения вам нужно указать свою высоту и ширину вместо wrap_content