Android에서 탐색 창으로 탐색 구성 요소를 설정하는 방법은 무엇입니까?

coroutineDispatcher

탐색 창에서 탐색 구성 요소를 어떻게 설정합니까? 내 앱에서 어떻게 사용합니까?

하나의 활동으로 모든 것을 수행 할 수 있습니까?

동적 도구 모음 가시성을 가진 하나의 활동과 조각으로 도구 모음 가시성을 어떻게 처리합니까? 또한 서랍을 닫고 접근 할 수 없게 만드는 데 필요한 파편이 있습니다.

이 질문은 자체 답변 질문이며 실제 QA보다 튜토리얼로 더 많이 작동합니다.

coroutineDispatcher

탐색 창에서 탐색 구성 요소를 어떻게 설정합니까?

내 앱에서 어떻게 사용합니까?

탐색 창 설정은 탐색 구성 요소와 관련하여 약간 다릅니다.

서랍 내비게이션이있는 새 앱을 만드는 경우 현재 자습서가 필요하지 않습니다. 하지만 여기서 이상하게 보일 수있는 몇 가지 사항과 앱의 후반부에서 서랍을 추가하기로 결정한 경우 설명하겠습니다.

첫째, 당신은 설정 당신의 필요 activity_main.xmlMainActivity탐색 구조에 대한 준비가되어 :

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

    <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:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer" />

</androidx.drawerlayout.widget.DrawerLayout>

app_bar_main그냥 어디에 :

<?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"
    tools:context=".MainActivity">

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

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

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

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

</androidx.coordinatorlayout.widget.CoordinatorLayout>

그리고 content_main파편이 보관되는 곳입니다.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/app_bar_main">

    <fragment
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:navGraph="@navigation/mobile_navigation" />
</androidx.constraintlayout.widget.ConstraintLayout>

알아야 할 사항 : 액티비티에 AppBar가 설정되어 있지 않아야합니다 AndroidManifest.xml.

android:theme="@style/AppTheme.NoActionBar"

당신이 통지하는 경우 app:menu="@menu/activity_main_drawer"NavigationView태그, 조각 이름은이 안에있는 것을 동일해야합니다 mobile_navigation.xml:

<group android:checkableBehavior="single">
        <item
            android:id="@+id/homeFragment"
            android:icon="@drawable/ic_menu_camera"
            android:title="@string/menu_home" />
        <item
            android:id="@+id/galleryFragment"
            android:icon="@drawable/ic_menu_gallery"
            android:title="@string/menu_gallery" />
        <item
            android:id="@+id/slideshowFragment"
            android:icon="@drawable/ic_menu_slideshow"
            android:title="@string/menu_slideshow" />
        <item
            android:id="@+id/toolsFragment"
            android:icon="@drawable/ic_menu_manage"
            android:title="@string/menu_tools" />
    </group>

    <item android:title="Communicate">
        <menu>
            <item
                android:id="@+id/shareFragment"
                android:icon="@drawable/ic_menu_share"
                android:title="@string/menu_share" />
            <item
                android:id="@+id/sendFragment"
                android:icon="@drawable/ic_menu_send"
                android:title="@string/menu_send" />
        </menu>
    </item>

</menu>

이렇게하면 아래에서 설명 onCreateOptionsMenu할 내용으로 클릭을 감지 하기 위해 호출 할 필요가 없습니다 . Android 팀은 이미이를 해결했습니다. 아래를 따르십시오.

지금까지 이것은 우리가 실제로 설정하는 일반적인 서랍과 크게 다르지 않습니다. 그러나 앱의 논리 부분에서 수행해야 할 몇 가지 구성이 있습니다. 그럼 MainActivity.kt. 먼저 다음이 필요합니다.

  private var appBarConfiguration: AppBarConfiguration? = null
  private var drawerLayout: DrawerLayout? = null
  private var toolbar: Toolbar? = null
  private var navController: NavController? = null

그 후 귀하의 onCreate방법에서 :

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        toolbar = findViewById(R.id.toolbar)
        setSupportActionBar(toolbar) //set the toolbar

        drawerLayout = findViewById(R.id.drawer_layout)
        val navView: NavigationView = findViewById(R.id.nav_view)
        navController = findNavController(R.id.nav_host_fragment)
        appBarConfiguration = AppBarConfiguration(
            setOf(
                R.id.homeFragment,
                R.id.galleryFragment,
                R.id.slideShowFragment,
                R.id.toolsFragment,
                R.id.shareFragment,
                R.id.sendFragment,
                R.id.loginFragment,
                R.id.phoneConfirmationFragment
            ), drawerLayout
        )

        setupActionBarWithNavController(navController!!, appBarConfiguration!!) //the most important part
        navView.setupWithNavController(navController!!) //the second most important part

      //other things unrelated
    }

여기서 무슨 일이 일어나는지 보자 :

먼저에 대한 참조가 필요합니다 navController. AppBarConfiguration단지 최상위 대상으로 열 수하려고하는 조각을 유지하는 클래스입니다. 이는 이후에 열릴 조각이 조각 백 스택에서 현재 조각을 해제한다는 것을 의미합니다. AppBarConfiguration드로어도 있음 을에 알리는 것이 중요합니다 (생성자에서 매개 변수로 전달됨).

아래에 다음과 같은 메서드가 있습니다 onSupportNavigateUp().

override fun onSupportNavigateUp(): Boolean {
        val navController = findNavController(R.id.nav_host_fragment)
        return navController.navigateUp(appBarConfiguration!!) || super.onSupportNavigateUp()
    }

이 방법은 뒤로 가기 버튼과 관련이 있습니다. 그러나 서랍 내비게이션이 있다면 너무 많이 필요하지 않을 것입니다. 이것은 백 스택에 많은 조각 (또는 적어도 두 개)이 추가 될 때 정말 유용합니다.

하나의 활동으로 모든 것을 수행 할 수 있습니까?

네, 물론입니다! 그러나 여전히 조건부 탐색에 관해서는 조금 더 많은 작업이 필요합니다. 서랍 앱의 일부가 아닌 조각을 표시하려는 경우와 같습니다. 그러나 여전히 구글은 그것으로 엄청난 진전을 이루었습니다. 여기 에서 조건부 탐색을 참조 할 수 있습니다 .

동적 도구 모음 가시성을 가진 하나의 활동과 조각으로 도구 모음 가시성을 어떻게 처리합니까? 또한 서랍을 닫고 접근 할 수 없게 만드는 데 필요한 파편이 있습니다.

다음 addOnDestinationChangedListener에서 사용할 수 있습니다 navController.

navController.addOnDestinationChangedListener { _, destination, _ ->
            when (destination.id) {
                R.id.loginFragment, R.id.registerFragment, R.id.phoneConfirmationFragment -> {
                    toolbar?.visibility = View.GONE
                    drawerLayout?.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
                }
                else -> {
                    toolbar?.visibility = View.VISIBLE
                    drawerLayout?.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
                }
            }
        }

이제 앱에 서랍 및 탐색 구성 요소가 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Android : 탐색 창에서 설정 페이지를 구현하는 방법은 무엇입니까?

분류에서Dev

탐색 창은 탐색 구성 요소에서 작동하지 않습니다.

분류에서Dev

Android 탐색 구성 요소를 사용하여 RecyclerView 항목에서 Fragment로 공유 전환 요소를 구현하는 방법은 무엇입니까?

분류에서Dev

탐색 구성 요소로 순환 논리를 구현하는 올바른 방법은 무엇입니까?

분류에서Dev

각도의 모델 팝업에서 부모 구성 요소를 탐색하는 방법은 무엇입니까?

분류에서Dev

시작을 최상위 탐색으로 사용하지 않을 때 서랍 탐색 단추를 구성하는 방법은 무엇입니까?

분류에서Dev

탐색 구성 요소에서 조각의 여러 인스턴스를 여는 방법은 무엇입니까?

분류에서Dev

기능 구성 요소에서 탐색 옵션을 재정의하는 방법은 무엇입니까?

분류에서Dev

Espresso에서 탐색 구성 요소 (Fragment to Fragment)를 사용하여 조각 탐색을 테스트하는 방법은 무엇입니까?

분류에서Dev

(탐색 구성 요소) 홈 조각으로 돌아갈 때 활동에 뒤로 화살표를 표시하는 방법은 무엇입니까?

분류에서Dev

XML에서 탐색 창 항목을 동적으로 생성하는 방법은 무엇입니까?

분류에서Dev

반응 탐색에서 동일한 구성 요소에서 소품을 탐색하고 전달하는 방법은 무엇입니까?

분류에서Dev

Android 탐색 구성 요소 : 프로그래밍 방식으로 대상을 추가하는 방법은 무엇입니까?

분류에서Dev

탐색 창에서 SettingsActivity를 제공하는 방법은 무엇입니까?

분류에서Dev

Android 탐색 창에 프로필 정보를 추가하는 방법은 무엇입니까?

분류에서Dev

Android의 탐색 창에서 프로그래밍 방식으로 하위 메뉴를 제거하는 방법은 무엇입니까?

분류에서Dev

인터페이스 빌더에서 탐색 컨트롤러를 구성하는 방법은 무엇입니까?

분류에서Dev

React Native Android에서 탐색 창 메뉴 클릭에서 2 개의보기를 탐색하는 방법은 무엇입니까?

분류에서Dev

탐색 창에서 로컬 HTML 페이지를 문자열과 연결하는 방법은 무엇입니까?

분류에서Dev

서랍 탐색은 스택 탐색처럼 구성 요소를 업데이트하지 않습니다.

분류에서Dev

탐색 구성 요소를 사용하여 단일 활동 디자인에서 권한을 사용하는 방법은 무엇입니까?

분류에서Dev

탐색 구성 요소를 사용하여 단일 활동 디자인에서 권한을 사용하는 방법은 무엇입니까?

분류에서Dev

별도의 구성 요소 파일에서 반응 라우터 탐색 링크를 사용하는 방법은 무엇입니까?

분류에서Dev

Windows 탐색기에서 확장 / 축소 메뉴를 비활성화하는 방법은 무엇입니까?

분류에서Dev

Delphi 10.3에서 구성 요소를 설치하고 검색 경로를 설정하는 방법은 무엇입니까?

분류에서Dev

React Router v4에서 버튼 클릭으로 경로를 탐색하는 방법은 무엇입니까?

분류에서Dev

Kotlin에서 클래스의 모든 필드를 동적으로 탐색하는 방법은 무엇입니까?

분류에서Dev

Jekyll에서 Selectbox를 탐색으로 사용하는 방법은 무엇입니까?

분류에서Dev

react-router v4를 사용하여 액션 생성자에서 프로그래밍 방식으로 탐색하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    Android : 탐색 창에서 설정 페이지를 구현하는 방법은 무엇입니까?

  2. 2

    탐색 창은 탐색 구성 요소에서 작동하지 않습니다.

  3. 3

    Android 탐색 구성 요소를 사용하여 RecyclerView 항목에서 Fragment로 공유 전환 요소를 구현하는 방법은 무엇입니까?

  4. 4

    탐색 구성 요소로 순환 논리를 구현하는 올바른 방법은 무엇입니까?

  5. 5

    각도의 모델 팝업에서 부모 구성 요소를 탐색하는 방법은 무엇입니까?

  6. 6

    시작을 최상위 탐색으로 사용하지 않을 때 서랍 탐색 단추를 구성하는 방법은 무엇입니까?

  7. 7

    탐색 구성 요소에서 조각의 여러 인스턴스를 여는 방법은 무엇입니까?

  8. 8

    기능 구성 요소에서 탐색 옵션을 재정의하는 방법은 무엇입니까?

  9. 9

    Espresso에서 탐색 구성 요소 (Fragment to Fragment)를 사용하여 조각 탐색을 테스트하는 방법은 무엇입니까?

  10. 10

    (탐색 구성 요소) 홈 조각으로 돌아갈 때 활동에 뒤로 화살표를 표시하는 방법은 무엇입니까?

  11. 11

    XML에서 탐색 창 항목을 동적으로 생성하는 방법은 무엇입니까?

  12. 12

    반응 탐색에서 동일한 구성 요소에서 소품을 탐색하고 전달하는 방법은 무엇입니까?

  13. 13

    Android 탐색 구성 요소 : 프로그래밍 방식으로 대상을 추가하는 방법은 무엇입니까?

  14. 14

    탐색 창에서 SettingsActivity를 제공하는 방법은 무엇입니까?

  15. 15

    Android 탐색 창에 프로필 정보를 추가하는 방법은 무엇입니까?

  16. 16

    Android의 탐색 창에서 프로그래밍 방식으로 하위 메뉴를 제거하는 방법은 무엇입니까?

  17. 17

    인터페이스 빌더에서 탐색 컨트롤러를 구성하는 방법은 무엇입니까?

  18. 18

    React Native Android에서 탐색 창 메뉴 클릭에서 2 개의보기를 탐색하는 방법은 무엇입니까?

  19. 19

    탐색 창에서 로컬 HTML 페이지를 문자열과 연결하는 방법은 무엇입니까?

  20. 20

    서랍 탐색은 스택 탐색처럼 구성 요소를 업데이트하지 않습니다.

  21. 21

    탐색 구성 요소를 사용하여 단일 활동 디자인에서 권한을 사용하는 방법은 무엇입니까?

  22. 22

    탐색 구성 요소를 사용하여 단일 활동 디자인에서 권한을 사용하는 방법은 무엇입니까?

  23. 23

    별도의 구성 요소 파일에서 반응 라우터 탐색 링크를 사용하는 방법은 무엇입니까?

  24. 24

    Windows 탐색기에서 확장 / 축소 메뉴를 비활성화하는 방법은 무엇입니까?

  25. 25

    Delphi 10.3에서 구성 요소를 설치하고 검색 경로를 설정하는 방법은 무엇입니까?

  26. 26

    React Router v4에서 버튼 클릭으로 경로를 탐색하는 방법은 무엇입니까?

  27. 27

    Kotlin에서 클래스의 모든 필드를 동적으로 탐색하는 방법은 무엇입니까?

  28. 28

    Jekyll에서 Selectbox를 탐색으로 사용하는 방법은 무엇입니까?

  29. 29

    react-router v4를 사용하여 액션 생성자에서 프로그래밍 방식으로 탐색하는 방법은 무엇입니까?

뜨겁다태그

보관