Базовый макет Android с кнопками для использования в нескольких действиях

Я разрабатываю приложение для 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 глобальные кнопки в каждом углу экрана в каждом действии?

0
0
148
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать 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" />
    .
    .
    .

Спасибо. Используя это, base_layout показывает все 3 кнопки в верхнем левом углу, друг над другом. Я предполагаю, что есть несколько новых атрибутов, которые я должен добавить к каждой кнопке ... Вы можете с этим помочь?

vir 20.06.2018 23:14

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

vir 20.06.2018 23:26

Вы добавили правильные ограничения для каждого представления? Проверить developer.android.com/training/constraint-layout

Mostafa Gazar 20.06.2018 23:28

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