Сделать видимым единый вид в RelativeLayout

У меня есть RelativeLayout, который содержит LinearLayout, содержащий 2 кнопки. Я хотел бы сделать эти кнопки видимыми, не делая видимым весь RelativeLayout или LinearLayout. Во время отладки кнопка getVisibility сообщает о том, что она видима, а getLocationOnScreen возвращает правильное размещение, но я их не вижу. Вот мой xml

<RelativeLayout
    android:id = "@+id/edit_div_element"
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:layout_margin = "10dp"
    android:padding = "20dp"
    android:background = "@drawable/full_popup_element"
    android:layout_alignParentBottom = "true"
    android:visibility = "gone"
    android:layout_centerVertical = "true"
    android:clickable = "false">

    <ImageView
        android:id = "@+id/close_edit"
        android:src = "@drawable/view_edge_promotion_close_icon"
        android:layout_gravity = "right"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:tint = "@color/uniform_style_blue"
        android:layout_alignParentTop = "true"
        android:layout_alignParentRight = "true"
        android:layout_marginBottom = "-10dp"/>

    <LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
        android:id = "@+id/popup_name_container"
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        android:layout_below = "@id/close_edit"
        android:orientation = "horizontal" >

        <TextView
            android:id = "@+id/popup_name_label"
            android:text = "@string/popup_name_label"
            android:layout_width = "wrap_content"
            android:layout_height = "wrap_content"
            android:textColor = "@color/black"
            android:textStyle = "bold"
            android:textSize = "@dimen/font_size_fixed_16" />

        <EditText
            android:id = "@+id/popup_name"
            android:hint = ""
            android:layout_width = "170dp"
            android:layout_height = "wrap_content"
            android:inputType = "textCapWords"
            android:singleLine = "true"
            android:textSize = "18sp"
            android:layout_marginLeft = "15dp"
            android:paddingBottom = "2dp"
            android:paddingLeft = "@dimen/marginSmall" />

    </LinearLayout>

    <TextView
        android:id = "@+id/popup_assignment_label"
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        android:text = "@string/edit_assignment_label"
        android:layout_below = "@id/popup_name_container"
        android:layout_marginTop = "20dp"/>

    <LinearLayout
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        android:layout_marginTop = "15dp"
        android:orientation = "horizontal"
        android:layout_below = "@id/popup_assignment_label"
        android:gravity = "bottom"
        >

      <android.support.v7.widget.RecyclerView
                android:id = "@+id/popup_assignment_recycler"
                android:layout_width = "180dp"
                android:layout_height = "wrap_content"
                android:focusable = "false"
                android:clickable = "false"/>


        <Button
            android:id = "@+id/btn_1"
            android:text = "@string/clear"
            android:layout_width = "wrap_content"
            android:layout_height = "wrap_content"
            android:layout_toRightOf = "@id/popup_assignment_recycler"
            android:layout_alignParentRight = "true"
            android:gravity = "bottom"
            android:padding = "6dp"
            android:maxLines = "1"
            android:background = "@color/uniform_style_blue"
            android:textColor = "#FFFFFF"
            android:layout_marginLeft = "18dp"
            />
        <Button
            android:id = "@+id/btn_2"
            android:layout_width = "wrap_content"
            android:layout_height = "wrap_content"
            android:layout_toRightOf = "@id/btn_1"
            android:layout_alignParentRight = "true"
            android:gravity = "bottom"
            android:padding = "6dp"
            android:maxLines = "1"
            android:background = "@color/uniform_style_blue"
            android:textColor = "#FFFFFF"
            android:layout_marginLeft = "9dp"
            />
    </LinearLayout>

</RelativeLayout>

Я устанавливаю видимость с помощью

Button mBtn1 = findViewById(R.id.btn_1);
mBtn1.setVisibility(View.VISIBLE);
Button mBtn2 = findViewById(R.id.btn_2);
mBtn2.setVisibility(View.VISIBLE);

Я также попытался определить видимость RelativeLayout как НЕВИДИМЫЙ в xml, но все равно не повезло.

Можно ли кнопки просто показать? Я в тупике, поэтому приветствую любую помощь!

Невозможно иметь невидимую родительскую ViewGroup с видимым дочерним View. Таким образом, вам нужно изменить макет или (если вы оставите его таким, какой он есть) вам придется индивидуально переключать видимость ImageView, RecyclerView, popup_assignment_label TextView и LinearLayout, содержащего EditText

Bö macht Blau 19.11.2018 20:56

Облом, но приятно знать, спасибо! Можно ли иметь представления кнопок вне макета и помещать их в фиксированное положение на экране относительно относительного макета, в котором они сейчас находятся?

Coleen 19.11.2018 21:06

Высота RelativeLayout будет отличаться, например с количеством и / или размером элементов в RecyclerView, поэтому положение кнопок (которые, кажется, выровнены по нижней строке RecyclerView) также должно измениться (иначе вы можете просто установить верхнее поле для кнопки). Вы может пытаетесь отслеживать изменения в размере RelativeLayout и каждый раз соответственно устанавливаете положение кнопки, но IMO это гораздо больше проблем, чем просто переключение видимости шести различных представлений в соответствии с требованиями бизнес-логики вашего приложения.

Bö macht Blau 19.11.2018 21:20

Я понимаю. Мой recyclerview горизонтальный и имеет заданную ширину, поэтому я подумал, что это может быть просто. Меня беспокоит переключение видимости, не будут ли отображаться все эти элементы, даже если на короткое время? Для ясности, вы предлагаете вызвать relativelayout.setVisibility (VISIBLE), а затем переключить все его дочерние представления на GONE? Еще раз спасибо за помощь - я слишком долго зацикливался на этом!

Coleen 19.11.2018 21:35

Если вы говорите о настройке всех дочерних представлений на GONE, мне интересно, где на самом деле должны отображаться кнопки. (До сих пор я думал, что вы хотите, чтобы у них было правое поле в 180 dp и положение по оси Y в зависимости от RecyclerView.) Может быть, картинка поможет прояснить, чего вы пытаетесь достичь?

Bö macht Blau 19.11.2018 21:41
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
396
1

Ответы 1

У вас есть кнопки, размещенные внутри макета. Если весь родитель невидим, все дочерние представления также невидимы. Если вы хотите отображать только кнопки, вы должны сделать видимым свой относительный макет, линейный макет - видимым, а затем сделать видимыми свои кнопки. Вы также можете скрыть все остальное содержимое вашего макета (сделать невидимым), если вы не хотите его показывать.

Рассматривайте представления родителей и детей как блоки. Ваши кнопки - это маленькие прямоугольники, которые размещаются внутри другого, более крупного прямоугольника, который является родительским, линейным макетом. Вы не можете открыть маленькие коробки, не открыв сначала большую (родительскую) коробку.

Спасибо, я получил это от комментария 0x0nosugar. Можно ли иметь представления кнопок вне макета и помещать их в фиксированное положение на экране относительно относительного макета, в котором они сейчас находятся?

Coleen 19.11.2018 21:10

Другие вопросы по теме