Как добавить ограничение только для плавающей кнопки? - PullRequest
1 голос
/ 10 октября 2019

Я хочу добавить ограничение только на две последние две кнопки плавающего действия с вложенной структурой кадра. Любая помощь будет высоко ценится. Моя основная идея заключается в том, чтобы перемещать и позиционировать плавающую кнопку действия из графического интерфейса пользователя.

Я заметил, что гравитация на Android помогает поместить кнопку справа и в центр справа с помощью

        android:layout_gravity="right|center"

как добавить кнопку справа, но между центроми заканчивается снизу.

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"

    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#000000"
    tools:context=".MediaPresentationActivity"
    android:id="@+id/FrameLayout">

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

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


                <VideoView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:id="@+id/videoViewPresentation"
                    android:layout_gravity="center" />

                <ImageView
                    android:id="@+id/imageViewPresentation"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:layout_gravity="left|top"
                    android:background="#ffffff"
                    android:src="@drawable/serv24logobig" />

            </FrameLayout>


        </LinearLayout>

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

        </LinearLayout>
    </LinearLayout>
//*how to add only below two floating action button as constrainlayout //

    <android.support.design.widget.FloatingActionButton

        android:id="@+id/fab1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_gravity="right|center"
        android:src="@android:drawable/stat_sys_phone_call"

        android:visibility="visible"

        app:backgroundTint="@android:color/holo_red_dark"
        app:elevation="12dp"
        app:rippleColor="?android:attr/colorActivatedHighlight" />


    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_gravity="right|center"
        android:src="@android:drawable/stat_sys_phone_call"
        android:visibility="visible"

        app:backgroundTint="?android:attr/colorMultiSelectHighlight"
        app:elevation="12dp"
        app:rippleColor="?android:attr/colorActivatedHighlight" />

</FrameLayout>

1 Ответ

0 голосов
/ 11 октября 2019

FrameLayouts допускает только ОДНОГО дочернего элемента (хорошо, что они позволяют N дочерним элементам, но они перекрываются, потому что он не поддерживает позиционирование дочерних элементов, а ожидает, что они займут все доступное пространство), поэтому, если вы хотите использовать ConstraintLayout для позиционированиядва элемента внутри FrameLayout, тогда вам нужно убедиться, что дочерние элементы вашего FrameLayout являются ViewGroup, которая позволяет позиционировать своих собственных дочерних элементов.

Давайте посмотрим, что вы получили.

Ваш кореньFrameLayout, возможно, вам следует начать с создания ConstraintLayout ...

Вы просите свой макет Root обернуть его содержимое. Если это не обычное представление, это несколько хмурится, но не неправильно;Поскольку я не знаю, как вы это используете, трудно сказать, является ли это правильным подходом в этом случае.

Я не знаю, как должен выглядеть ваш пользовательский интерфейс, но из того, что я вижу, у вас есть серия вложенных LinearLayouts, Vertical, затем Horizontal, чтобы иметь ImageView и VideoView ... не уверен, как вы ожидаетеони должны быть расположены.

Вниз Ниже у вас есть пустой LinearLayout ... (?)

, а затем вы бросили два FAB.

Это не сработает. Я предлагаю вам вернуться ко всему макету (что, кстати, неверно при вставке, потому что вы закрываете FrameLayout дважды ...).

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

Ответ на ваш вопрос, как написано в это время:

"Как я могу добавить макет ограничения только для двух последних FAB? "

Вы не можете (для целей, которые, я думаю, вы хотите), но если вы действительно хотите понять, почему и что произойдет:

Просто добавьте внутри вашего FrameLayout this:

        <androidx.constraintlayout.widget.ConstraintLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
            >
            <!-- YOUR FABS GO HERE -->

        </androidx.constraintlayout.widget.ConstraintLayout>

Это, очевидно, НЕ СМОТРИТ ПУТЬ, КОТОРЫЙ ВЫ ХОТИТЕ, но вот почему я спросил вас в комментарии выше: «покажите нам, что вы хотите, нам нужна минимальная воспроизводимость пример того, что вам нужно ".

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

...