Я разрабатываю приложение для Android, в котором многие действия должны иметь 4 кнопки в своем расположении, по одной в каждом углу экрана. Поведение этих кнопок всегда одинаково, независимо от текущего действия (например, кнопка выключения / включения звука, кнопка справки и т. д.). Я разработал base_layout с верхней правой и верхней левой кнопками и использовал тег в макете действий. Я также создал класс BaseActivity, который имеет поведение кнопок, поэтому каждое действие, которое включает их, наследуется от этого класса. Пока все работает нормально, но если я добавлю одну из кнопок внизу экрана, этот макет будет перекрываться с макетом каждого действия, поэтому я вижу только base_layout, а не макет действия.
Вот base_layout.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">
<ImageButton
android:id = "@+id/btn_atras"
android:src = "@drawable/flecha_atras"
android:layout_width = "50dp"
android:layout_height = "wrap_content"
android:layout_alignParentStart = "true"
android:layout_alignParentLeft = "true"
android:adjustViewBounds = "true"
android:scaleType = "fitXY"
android:background = "@android:color/transparent"
android:contentDescription = "Atrás"/>
<ToggleButton
android:id = "@+id/btn_sonido"
android:layout_width = "50dp"
android:layout_height = "wrap_content"
android:layout_alignParentEnd = "true"
android:layout_alignParentRight = "true"
android:background = "@android:color/transparent"
android:button = "@drawable/sonido_selector"
android:checked = "true"
android:textOff = ""
android:textOn = "" />
<ImageButton
android:id = "@+id/btn_ayuda"
android:src = "@drawable/ayuda"
android:layout_width = "50dp"
android:layout_height = "wrap_content"
android:layout_alignParentBottom = "true"
android:layout_alignParentLeft = "true"
android:adjustViewBounds = "true"
android:scaleType = "fitXY"
android:background = "@android:color/transparent"
android:contentDescription = "Ayuda"/>
</RelativeLayout>
А вот часть макета из действия, которое его использует:
<?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 = "match_parent"
android:background = "@android:color/holo_blue_light">
<include
android:id = "@+id/bar"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
layout = "@layout/base_layout" />
<TextView
android:id = "@+id/textView"
style = "@style/TextoTitulo"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:gravity = "center"
android:text = "@string/titulo_menu" />
<!--more stuff here that I'm cutting because it's irrelevant to the question--->
</LinearLayout>
Как лучше всего использовать 4 глобальные кнопки в каждом углу экрана в каждом действии?
Вы можете использовать ConstraintLayout и тег merge.
base_layout.xml будет выглядеть примерно так
<merge xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
tools:parentTag = "android.support.constraint.ConstraintLayout">
.
.
.
И Activity xml хотел бы что-то вроде
<android.support.constraint.ConstraintLayout
xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "wrap_content">
<include
android:id = "@+id/bar"
layout = "@layout/base_layout"
android:layout_width = "0dp"
android:layout_height = "0dp"
app:layout_constraintEnd_toStartOf = "parent"
app:layout_constraintStart_toStartOf = "parent"
app:layout_constraintTop_toTopOf = "parent"
app:layout_constraintBottom_toBottomOf = "parent" />
.
.
.
Я имею в виду, что раньше кнопки были в RelativeLayout, но теперь я понимаю, что тег стирается, и кнопки идут после открытия тега слияния и до его закрытия, поэтому я не уверен, какие атрибуты использовать для размещения кнопок в их правильные места
Вы добавили правильные ограничения для каждого представления? Проверить developer.android.com/training/constraint-layout
Спасибо. Используя это, base_layout показывает все 3 кнопки в верхнем левом углу, друг над другом. Я предполагаю, что есть несколько новых атрибутов, которые я должен добавить к каждой кнопке ... Вы можете с этим помочь?