NavigationDrawer не отображается в AndroidX - PullRequest
0 голосов
/ 21 мая 2019

У меня есть приложение, которое я использую с компонентами androidx, и я не могу заставить его показать значок гамбургера, указывающий на DrawerActivity.Вот мой макет:

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout
    android:id="@+id/drawer_layout"
    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">

<androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        tools:showIn="@layout/activity_main"
        tools:context=".MainActivity">

    <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            style="@style/Widget.MyApp.ActionBar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/colorPrimary"
            android:minHeight="?attr/actionBarSize"
            android:theme="@style/Base.ThemeOverlay.AppCompat.Dark"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toTopOf="@id/sliding_tabs"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"/>

    <com.webnation.begonerobotexters.widgets.SlidingTabLayout
            android:id="@+id/sliding_tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/colorPrimary"
            app:layout_constraintTop_toBottomOf="@+id/toolbar"
            app:layout_constraintBottom_toTopOf="@+id/viewpager"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"/>

    <androidx.viewpager.widget.ViewPager
            android:id="@+id/viewpager"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            app:layout_constraintTop_toBottomOf="@+id/sliding_tabs"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
    />

</androidx.constraintlayout.widget.ConstraintLayout>

<!-- The navigation drawer -->
<com.google.android.material.navigation.NavigationView
        android:id="@+id/navigation_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:itemIconTint="@android:color/white"
        app:headerLayout="@layout/drawer_header"
        app:menu="@menu/menu_drawer"/>
</androidx.drawerlayout.widget.DrawerLayout>

Вот как я настраиваю навигационный ящик в упражнении:

private fun setUpNavigationDrawer() {
    setSupportActionBar(toolbar)
    val actionBar = supportActionBar

    try {
        assert(actionBar != null)
        actionBar?.setDisplayHomeAsUpEnabled(true)
        actionBar?.setHomeButtonEnabled(true)
        //actionBar?.setSubtitle(getString(R.string.subtitle))
        actionBar?.setDisplayShowTitleEnabled(true)
    } catch (ignored: Exception) {
        Timber.e(ignored)
        ignored.printStackTrace()
    }

    toolbar?.setBackgroundColor(ContextCompat.getColor(this, R.color.colorPrimary))
    toolbar?.setTitleTextColor(ContextCompat.getColor(this, R.color.tab_text_color))


    navigation_view.setNavigationItemSelectedListener { menuItem ->
        menuItem.isChecked = true
        when (menuItem.itemId) {
            R.id.navigation_item_1 -> {
                val intent = Intent(this, EulaActivity::class.java)
                intent.putExtra(keyFileName, "privacy")
                startActivity(intent)
            }
            R.id.navigation_item_2 -> {
                val intent = Intent(this, EulaActivity::class.java)
                intent.putExtra(keyFileName, "eula")
                startActivity(intent)
            }
            R.id.navigation_item_3 -> {

            }


        }
        if (navigation_view != null) {
            drawer_layout?.closeDrawer(navigation_view)
        }
        true
    }


    mDrawerToggle = object: ActionBarDrawerToggle(this, drawer_layout, toolbar,R.string.drawer_open, R.string.drawer_close) {
        override fun onDrawerOpened(drawerView: View) {
            super.onDrawerOpened(drawerView)

            invalidateOptionsMenu()
        }

        override fun onDrawerClosed(view: View) {
            super.onDrawerClosed(view)
            //getSupportActionBar().setTitle(mActivityTitle);
            invalidateOptionsMenu()
        }
    }

    mDrawerToggle.isDrawerIndicatorEnabled = true
    drawer_layout?.addDrawerListener(mDrawerToggle)
    mDrawerToggle.syncState()

}

Вот мой DrawActivity:

class DrawerActivity : AppCompatActivity() {

lateinit var draw_layout: DrawerLayout
lateinit var mDrawerToggle: ActionBarDrawerToggle

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
}

override fun onStart() {
    super.onStart()

    draw_layout = findViewById<DrawerLayout>(R.id.drawer_layout)
    mDrawerToggle = ActionBarDrawerToggle(this, draw_layout, 0, 0)
    draw_layout.addDrawerListener(mDrawerToggle)

    val actionBar = supportActionBar
    if (actionBar != null) {
        actionBar.setDisplayHomeAsUpEnabled(true)
        actionBar.setDisplayShowHomeEnabled(true)
        actionBar.setDisplayShowTitleEnabled(true)
        actionBar.setDisplayUseLogoEnabled(false)
        actionBar.setHomeButtonEnabled(true)
    }
}

override fun onPostCreate(savedInstanceState: Bundle?) {
    super.onPostCreate(savedInstanceState)
    mDrawerToggle.syncState()
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    return mDrawerToggle.onOptionsItemSelected(item) || super.onOptionsItemSelected(item)
}
}

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Я обнаружил, что моя вкладка видового экрана / скользящей панели закрывала панель действий.Поэтому я отключил свой ConstraintLayout для LinearLayout, и poof появилось.

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:orientation="vertical"
        tools:showIn="@layout/activity_main"
        tools:context=".MainActivity">

    <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            style="@style/Widget.MyApp.ActionBar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/colorPrimary"
            android:minHeight="?attr/actionBarSize"
            android:theme="@style/Base.ThemeOverlay.AppCompat.Dark"
            />


   <com.webnation.begonerobotexters.widgets.SlidingTabLayout
            android:id="@+id/sliding_tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/colorPrimary"
            />
    <androidx.viewpager.widget.ViewPager
            android:id="@+id/viewpager"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"

    />

</LinearLayout>

<!-- The navigation drawer -->
<com.google.android.material.navigation.NavigationView
        android:id="@+id/navigation_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:itemIconTint="@android:color/white"
        app:headerLayout="@layout/drawer_header"
        app:menu="@menu/menu_drawer"/>
</androidx.drawerlayout.widget.DrawerLayout>
0 голосов
/ 21 мая 2019

ActionBarDrawerToggle устарела довольно долгое время; для этой кнопки можно использовать собственный resId фреймворка (для надувания в пользовательское представление ActionBar, чтобы оно отображалось там, где и должно):

<androidx.appcompat.widget.AppCompatImageButton
    android:id="@android:id/home"
    android:src="@drawable/ic_menu_black_36dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:contentDescription="@null" />

Можно получить событие щелчка вместе с событиями в верхнем правом меню; например:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

        case android.R.id.home:
            /* hide/show NavigationView */
            break;

        ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...