У меня есть 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, но все равно не повезло.
Можно ли кнопки просто показать? Я в тупике, поэтому приветствую любую помощь!
Облом, но приятно знать, спасибо! Можно ли иметь представления кнопок вне макета и помещать их в фиксированное положение на экране относительно относительного макета, в котором они сейчас находятся?
Высота RelativeLayout будет отличаться, например с количеством и / или размером элементов в RecyclerView, поэтому положение кнопок (которые, кажется, выровнены по нижней строке RecyclerView) также должно измениться (иначе вы можете просто установить верхнее поле для кнопки). Вы может пытаетесь отслеживать изменения в размере RelativeLayout и каждый раз соответственно устанавливаете положение кнопки, но IMO это гораздо больше проблем, чем просто переключение видимости шести различных представлений в соответствии с требованиями бизнес-логики вашего приложения.
Я понимаю. Мой recyclerview горизонтальный и имеет заданную ширину, поэтому я подумал, что это может быть просто. Меня беспокоит переключение видимости, не будут ли отображаться все эти элементы, даже если на короткое время? Для ясности, вы предлагаете вызвать relativelayout.setVisibility (VISIBLE), а затем переключить все его дочерние представления на GONE? Еще раз спасибо за помощь - я слишком долго зацикливался на этом!
Если вы говорите о настройке всех дочерних представлений на GONE, мне интересно, где на самом деле должны отображаться кнопки. (До сих пор я думал, что вы хотите, чтобы у них было правое поле в 180 dp и положение по оси Y в зависимости от RecyclerView.) Может быть, картинка поможет прояснить, чего вы пытаетесь достичь?




У вас есть кнопки, размещенные внутри макета. Если весь родитель невидим, все дочерние представления также невидимы. Если вы хотите отображать только кнопки, вы должны сделать видимым свой относительный макет, линейный макет - видимым, а затем сделать видимыми свои кнопки. Вы также можете скрыть все остальное содержимое вашего макета (сделать невидимым), если вы не хотите его показывать.
Рассматривайте представления родителей и детей как блоки. Ваши кнопки - это маленькие прямоугольники, которые размещаются внутри другого, более крупного прямоугольника, который является родительским, линейным макетом. Вы не можете открыть маленькие коробки, не открыв сначала большую (родительскую) коробку.
Спасибо, я получил это от комментария 0x0nosugar. Можно ли иметь представления кнопок вне макета и помещать их в фиксированное положение на экране относительно относительного макета, в котором они сейчас находятся?
Невозможно иметь невидимую родительскую ViewGroup с видимым дочерним View. Таким образом, вам нужно изменить макет или (если вы оставите его таким, какой он есть) вам придется индивидуально переключать видимость ImageView, RecyclerView, popup_assignment_label TextView и LinearLayout, содержащего EditText