Как сделать несколько макетов ящиков за одно действие

Хотеть сделать

Откройте несколько навигационных страниц (drawerlayout) в одном и том же действии.

Один из панели инструментов, а другие - нажатием обычной кнопки. Я уже знаю, что OpenDrawer(GravityCompat.Start); помогает открыть страницу навигации нажатием кнопки. Таким образом, я ищу способ открыть несколько страниц навигации в одном и том же действии.

Параметр

Создайте проект с навигацией по умолчанию.

Что я сделал

Измените макет activity_main.xml с DrawerLayout на FrameLayout и сделайте 2 DrawerLayout в FrameLayout, который я сделал.

Кроме того, я сделал еще одну панель инструментов в app_bar_main.xml.

※ Имя файла по умолчанию, которое я сделал проект.

Код

Activity_main.xml

<?xml version = "1.0" encoding = "utf-8"?>
<FrameLayout 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:id = "@+id/frame_drawer"
                                    android:layout_width = "match_parent"
                                    android:layout_height = "match_parent">


<androidx.drawerlayout.widget.DrawerLayout
     android:layout_width = "match_parent"
     android:layout_height = "match_parent"
     android:id = "@+id/drawer_layout"
     android:fitsSystemWindows = "true"
     tools:openDrawer = "start">

    <include
        layout = "@layout/app_bar_main"
        android:layout_width = "match_parent"
        android:layout_height = "match_parent" />

    <com.google.android.material.navigation.NavigationView
        android:id = "@+id/nav_view"
        android:layout_width = "wrap_content"
        android:layout_height = "match_parent"
        android:layout_gravity = "start"
        android:fitsSystemWindows = "true"
        app:menu = "@menu/activity_main_drawer" />

</androidx.drawerlayout.widget.DrawerLayout>

    <androidx.drawerlayout.widget.DrawerLayout
         android:layout_width = "match_parent"
         android:layout_height = "match_parent"
         android:id = "@+id/drawer_layout2"
         android:fitsSystemWindows = "true"
         tools:openDrawer = "start">

    <include
        layout = "@layout/app_bar_main"
        android:layout_width = "match_parent"
        android:layout_height = "match_parent" />

    <com.google.android.material.navigation.NavigationView
        android:id = "@+id/nav_view2"
        android:layout_width = "wrap_content"
        android:layout_height = "match_parent"
        android:layout_gravity = "start"
        android:fitsSystemWindows = "true"
        app:menu = "@menu/activity_main_drawer" />

</androidx.drawerlayout.widget.DrawerLayout>
</FrameLayout>

app_bar_main.xml

<?xml version = "1.0" encoding = "utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout 
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 = "match_parent">

<com.google.android.material.appbar.AppBarLayout
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:theme = "@style/AppTheme.AppBarOverlay">

         android:layout_width = "match_parent"
         android:layout_height = "match_parent">

                <androidx.appcompat.widget.Toolbar
        android:id = "@+id/toolbar"
        android:layout_width = "match_parent"
        android:layout_height = "?attr/actionBarSize"
        android:background = "?attr/colorPrimary"
        app:popupTheme = "@style/AppTheme.PopupOverlay" />

                <androidx.appcompat.widget.Toolbar
        android:id = "@+id/toolbar2"
        android:layout_width = "match_parent"
        android:layout_height = "?attr/actionBarSize"
        android:background = "?attr/colorPrimary"
        app:popupTheme = "@style/AppTheme.PopupOverlay" />

</com.google.android.material.appbar.AppBarLayout>

<include layout = "@layout/content_main" />

<com.google.android.material.floatingactionbutton.FloatingActionButton
    android:id = "@+id/fab"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:layout_gravity = "bottom|end"
    android:layout_margin = "@dimen/fab_margin"
    app:srcCompat = "@android:drawable/ic_dialog_email" />

</androidx.coordinatorlayout.widget.CoordinatorLayout>

MainActivity.cs

    [Activity(Label = "@string/app_name", Theme = "@style/AppTheme.NoActionBar", MainLauncher = true)]
public class MainActivity : AppCompatActivity, NavigationView.IOnNavigationItemSelectedListener
{
    DrawerLayout drawer2;
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        SetContentView(Resource.Layout.activity_main);
        Toolbar toolbar = FindViewById<Toolbar>(Resource.Id.toolbar);
        SetSupportActionBar(toolbar);
        SupportActionBar.Title = "Site 1";
        // for opening one more navigation page
        Toolbar toolbar2 = FindViewById<Toolbar>(Resource.Id.toolbar);
        SetSupportActionBar(toolbar2);
        SupportActionBar.Title = "Site 2";

        // for opening one more navigation page
        FloatingActionButton fab = FindViewById<FloatingActionButton>(Resource.Id.fab);
        fab.Click += FabOnClick;

        DrawerLayout drawer = FindViewById<DrawerLayout>(Resource.Id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, Resource.String.navigation_drawer_open, Resource.String.navigation_drawer_close);
        drawer.AddDrawerListener(toggle);
        toggle.SyncState();
        NavigationView navigationView = FindViewById<NavigationView>(Resource.Id.nav_view);
        navigationView.SetNavigationItemSelectedListener(this);
        // for opening one more navigation page
        drawer2 = FindViewById<DrawerLayout>(Resource.Id.drawer_layout2);
        ActionBarDrawerToggle toggle2 = new ActionBarDrawerToggle(this, drawer2, toolbar2, Resource.String.navigation_drawer_open, Resource.String.navigation_drawer_close);
        drawer2.AddDrawerListener(toggle2);
        toggle2.SyncState();
        NavigationView navigationView2 = FindViewById<NavigationView>(Resource.Id.nav_view2);
        navigationView2.SetNavigationItemSelectedListener(this);
    }
        private void FabOnClick(object sender, EventArgs eventArgs)
        {
            drawer2.OpenDrawer(GravityCompat.Start);
        }
}
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Если вы поместите второй DrawerLayout внутри первого, это может сработать.

<?xml version = "1.0" encoding = "utf-8"?>
<FrameLayout 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:id = "@+id/frame_drawer"
                                    android:layout_width = "match_parent"
                                    android:layout_height = "match_parent">


<androidx.drawerlayout.widget.DrawerLayout
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    android:id = "@+id/drawer_layout"
    android:fitsSystemWindows = "true"
    tools:openDrawer = "start">

    <!--<include
        layout = "@layout/app_bar_main"
        android:layout_width = "match_parent"
        android:layout_height = "match_parent" />-->

    <androidx.drawerlayout.widget.DrawerLayout
        android:layout_width = "match_parent"
        android:layout_height = "match_parent"
        android:id = "@+id/drawer_layout2"
        android:fitsSystemWindows = "true"
        tools:openDrawer = "start">

        <include
            layout = "@layout/app_bar_main"
            android:layout_width = "match_parent"
            android:layout_height = "match_parent" />

        <com.google.android.material.navigation.NavigationView
            android:id = "@+id/nav_view2"
            android:layout_width = "wrap_content"
            android:layout_height = "match_parent"
            android:layout_gravity = "start"
            android:fitsSystemWindows = "true"
            app:menu = "@menu/activity_main_drawer" />

    </androidx.drawerlayout.widget.DrawerLayout>

    <com.google.android.material.navigation.NavigationView
        android:id = "@+id/nav_view"
        android:layout_width = "wrap_content"
        android:layout_height = "match_parent"
        android:layout_gravity = "start"
        android:fitsSystemWindows = "true"
        app:menu = "@menu/activity_main_drawer" />

</androidx.drawerlayout.widget.DrawerLayout>
</FrameLayout>

Большое спасибо! Оно работает! Однако открытые навигации были такими же, поэтому я удаляю этот код. ActionBarDrawerToggle toggle2 = новый ActionBarDrawerToggle (это, ящик2, панель инструментов2, Resource.String.navigation_drawer_open, Resource.String.navigation_drawer_close); ящик2.AddDrawerListener(toggle2); toggle2.SyncState();

yuki yuki 08.11.2022 08:59

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