Боковая панель запуска с несколькими окнами Android

#java #android #navigation-drawer #sidebar #slidingdrawer

Вопрос:

Я хочу, чтобы этот рисунок(фото ниже) всегда открывался, как многооконная боковая панель Samsung.

До сих пор я могу открыть этот рисунок(боковую панель) в приложении. пожалуйста, дайте инструкцию, чтобы иметь возможность открыть этот вывод(боковую панель) из любого места(я имею в виду из любого другого приложения или даже с главного экрана устройства).

Заранее спасибо.

Это эта боковая панель

Вот мой XML-файл drayerLayout:

 <?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout 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/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start"
    android:background="@color/cardview_light_background">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Swipe Right"
        android:textSize="15dp"
        android:textColor="#D50000"
        />
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Open App InnMultiWIndow Mode"
        android:textSize="30sp"
        android:gravity="center"
        android:textStyle="bold"
        android:textColor="@color/black"/>


    <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">

        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="20dp"
            tools:context=".MainActivity2">

            <ListView
                android:id="@ id/listView"
                android:layout_width="280dp"
                android:layout_height="0dp"
                android:layout_marginStart="10dp"
                android:layout_marginTop="8dp"
                android:layout_marginEnd="10dp"
                android:layout_marginBottom="10dp"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.0"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />
        </androidx.constraintlayout.widget.ConstraintLayout>

    </com.google.android.material.navigation.NavigationView>


</androidx.drawerlayout.widget.DrawerLayout>
 

Комментарии:

1. замечание принято к сведению. Спасибо.

Ответ №1:

Этого нельзя достичь, сделав что-то глобальное, чтобы вы вносили некоторые изменения в каждую деятельность

вы можете создать новый класс, у которого будет метод для инициализации навигации, переместить представление навигации в отдельный xml-файл и включить этот файл в каждое действие, а также вызвать метод инициализации в каждом действии

Вы можете попробовать эту библиотеку https://github.com/mikepenz/MaterialDrawer чтобы переместить большую часть xml-кода на java, чтобы вам не приходилось добавлять DrawerLayout в каждое действие, но выбор за вами, всегда лучше отказаться от использования сторонних библиотек, если вы можете

если вы используете библиотеку, то вот несколько примеров, которым вы можете следовать

Constant.java

 private void setupNavigationDrawer() {
    ProfileDrawerItem section = new ProfileDrawerItem()
            .withSetSelected(false)
            .withSetSelected(false)
            .withEnabled(false);
    PrimaryDrawerItem joyType0DrawerItem = new PrimaryDrawerItem().withName("Basic Gamepad").withTag(KEY_BASIC_GAMEPAD_1).withLevel(2);
    PrimaryDrawerItem joyType1DrawerItem = new PrimaryDrawerItem().withName("Assault Horizon").withTag(KEY_ASSAULT_HORIZON).withLevel(2);
    PrimaryDrawerItem joyType2DrawerItem = new PrimaryDrawerItem().withName("Awesomenauts").withTag(KEY_AWESOMENAUTS).withLevel(2);
    PrimaryDrawerItem joyType3DrawerItem = new PrimaryDrawerItem().withName("BombSquad").withTag(KEY_BOMBSQUAD).withLevel(2);
    PrimaryDrawerItem joyType4DrawerItem = new PrimaryDrawerItem().withName("Final Fantasy XIII").withTag(KEY_FINAL_FANTASY_XIII).withLevel(2);
    SectionDrawerItem sectionDrawerItem = new SectionDrawerItem().withName("Joystick Type").withTextColorRes(R.color.colorAccent);
    PrimaryDrawerItem deviceDrawerItem = new PrimaryDrawerItem().withName("Device Connection").withTag(KEY_DEVICE_CONNECTION).withIcon(GoogleMaterial.Icon.gmd_devices);
    PrimaryDrawerItem settingsDrawerItem = new PrimaryDrawerItem().withName("Settings").withTag("settings").withIcon(GoogleMaterial.Icon.gmd_settings);

    ndMenu = new DrawerBuilder()
            .withActivity(this)
            .withToolbar(tbMain)
            .withCloseOnClick(true)
            .withFireOnInitialOnClick(true)
            .withSelectedItemByPosition(6)
            .withDelayDrawerClickEvent(300)
            .withDisplayBelowStatusBar(true)
            .withTranslucentStatusBar(false)
            .withOnDrawerItemClickListener(this)
            .addDrawerItems(section, deviceDrawerItem, settingsDrawerItem, sectionDrawerItem, joyType0DrawerItem, joyType1DrawerItem, joyType2DrawerItem, joyType3DrawerItem, joyType4DrawerItem)
            .build();

    findViewById(R.id.nav_button).setOnClickListener(new 
     View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
        // Check these functions from library example to check drawer state and open close drawer
        if(ndMenu.isDrawerOpen){
           ndMenu.closeDrawer();
         } else {
           ndMenu.openDrawer();
         }
        });
}
 

MainActivity.xml

 <LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true">

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


<LinearLayout>
 

nav_view.xml

 <LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    orientation="horizontal">

    <Image
      id="@ id/nav_button"
      android:layout_width="30dp"
      android:layout_height="30dp"/>


<LinearLayout>
 

Комментарии:

1. Но я говорю о боковой панели, такой как многооконная панель задач Samsung. где всякий раз, когда пользователь делает настройку включенной, он может получить доступ к боковой панели из любого приложения или с главного экрана устройства.