I am working in Android Studio using Java. I want to implement a Navigation Drawer(those left to right swipe ones) with a Hamburger icon always on top. But there is some issue of "Top-level destination" without which that Hamburger icon doesn't show up. One of the solutions I found was to make that activity as my Launcher activity but I don't want that.
Can someone please explain to me what this "Top-level destination" phrase means and a possible workaround for my Navigation Drawer problem!!
This is my navigation layout
<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:layout_width="match_parent"
android:id="#+id/drawer_layout"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:visibility="visible"
tools:context=".Main_Screen"
tools:openDrawer="start">
<include
layout="#layout/app_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<com.google.android.material.navigation.NavigationView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="#+id/nav_view"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:menu="#menu/drawer_menu"
app:headerLayout="#layout/drawer_header"
/>
</androidx.drawerlayout.widget.DrawerLayout>
this is the included appbar
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
style="#style/Widget.MaterialComponents.AppBarLayout.Primary">
<androidx.appcompat.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
android:id="#+id/toolbar"
app:contentInsetStartWithNavigation="0dp" />
</com.google.android.material.appbar.AppBarLayout>
</LinearLayout>
I have created an activity named LoginActivity, where I just put a button, and created an activity named MainActivity, where I put drawer. By clicking the button, I start the MainActivity.
In fact, I have not recurrented the problem you have said above.
But I have a suggestion that you may try creating the activity with drawer by file template not by hand, to avoid some mistakes that we have not discovered.
The step is: Right click the package name -> New -> Activity -> Navigation Drawer Activity.
Related
layout_gravity attribute is not showing in Navigation View.I want to give the layout_gravity = "start" but it is not showing.
Here is my layout.xml file
<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:context=".HomeActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
android:theme="#style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="#style/ThemeOverlay.AppCompat.Light"
android:elevation="#dimen/_4sdp"
android:background="#color/colorPrimary">
</androidx.appcompat.widget.Toolbar>
</LinearLayout>
<com.google.android.material.navigation.NavigationView
android:layout_width="match_parent"
android:layout_height="match_parent"/>
If you want to see your Navigation View you must add tools:openDrawer:"start" in the DrawerLayout.
This will set your Drawer as visible only in the layout editor, in the app it will be hidden until the user opens it.
Remember also to set the Gravity, the Menu and the Header Layout (if you have one) with
android:layout_gravity="start"
app:menu="#menu/your_menu"
app:headerLayout="#layout/your_header_layout"
in your NavigationView.
Hope it helps!
add this into drawer tools:openDrawer="start" and add this into navigation
android:layout_gravity="start"
and don't forget to add the menu app:menu="#menu/menu"
Just copy and past the below code and adjust it and it will work
<com.google.android.material.navigation.NavigationView
android:id="#+id/navigation"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start|left"
app:headerLayout="#layout/header"
app:menu="#menu/navigation_menu" />
I have an application on android. In it I have a base activity with drawer and toolbar, this activity also contains progress bar and dimmed layout used by all the inheritors to display loading.
When I run the app on Xiaomi or Huawei phone (both Android 6.0.1), it works in all activities except one, and I can't figure out why. The dimmed layout is shown, but there's no progress bar. I tried to put progress bar into that activity, but it isn't shown anyway. When I run on emulator, everything's fine in all API's.
How it is:
How it should be (pay attention at the blue loading progress bar):
The layout of the base activity:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include layout="#layout/view_toolbar"/>
<android.support.v4.widget.DrawerLayout
android:id="#+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="#+id/content_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"/>
<include
android:id="#+id/left_drawer"
layout="#layout/view_drawer"/>
</android.support.v4.widget.DrawerLayout>
</LinearLayout>
<View android:id="#+id/dimmed_background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alpha="0"
android:background="#android:color/black" />
<ProgressBar android:id="#+id/main_progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:visibility="gone"/>
</FrameLayout>
Activities-inheritors use progress bar and dimmed layout as following:
//Show loading:
mProgressBar.setVisibility(View.VISIBLE);
mDimmedBackground.setAlpha((float) 0.3);
//Hide loading:
mProgressBar.setVisibility(View.GONE);
mDimmedBackground.setAlpha((float) 0);
The activity where it doesn't work has the following layout:
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="#dimen/view_padding_small"
android:scrollbars="vertical"/>
</FrameLayout>
I've been searching around trying to fix this problem but I can't seem to find the answer. I have multiple items in this navigation drawer and each one of those items holds a menu of other items. The parent items have a title associated with them and I want to change the text color but I can't seem to find the answer anywhere. I would really appreciate the help, and here is an image to more accurately understand my issue.
Navigation Drawer: Android Studio
Thank you for the help in advance!
<android.support.v4.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" />
<android.support.design.widget.NavigationView
android:id="#+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
android:background="#color/colorPrimaryDark"
app:headerLayout="#layout/nav_header_main"
app:menu="#menu/activity_main_drawer"
app:itemTextColor="#color/white"
app:itemIconTint="#color/white" />
</android.support.v4.widget.DrawerLayout>
If you are using NavigationView introduced in material design library then add following attribute to change the color of your drawer item
<android.support.design.widget.NavigationView
android:layout_width="wrap_content"
android:layout_height="match_parent"
app:itemBackground="#drawable/my_ripple" //sets background of the item
app:itemIconTint="#color/item_icon_color" //sets color of the drawer item icon
app:itemTextColor="#color/item_color" //sets color of the drawer item
....
/>
you put navigationview like that.
<android.support.design.widget.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" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#color/colorContentBG">
<include layout="#layout/nav_header_main" />
<ListView
android:entries="#array/test"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="#+id/listMenu"
android:dividerHeight="0dp"
android:divider="#android:color/transparent"/>
</LinearLayout>
</android.support.design.widget.NavigationView>
and whatever ui design for listview.
So basicly we implemented a Navigation Drawer to our project yesterday and since we can't click on items on our page anymore, as if the drawer still overlays the page even when closed enabling us to click on anything on the page. Is there a way to enable clicking on the elements below this "closed" navigation drawer?
Here's a sniplet of one of our pages using the Navigation Drawer, we're unable to click the single switchbutton even when the drawer is closed.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.cocacola.fastgids.SettingsActivity">
<android.support.v7.widget.Toolbar
android:id="#+id/my_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:elevation="4dp"
android:theme="#style/ThemeOverlay.AppCompat.ActionBar"
app:popupTheme="#style/ThemeOverlay.AppCompat.Light"/>
<android.support.v4.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:elevation="4dp"
>
<android.support.design.widget.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" />
</android.support.v4.widget.DrawerLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="#string/setting_Bootanim"
android:id="#+id/textView2"
android:layout_marginLeft="22dp"
android:layout_marginStart="22dp"
android:layout_below="#+id/my_toolbar"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="28dp" />
<Switch
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="#+id/switchAnimation"
android:checked="true"
android:text="Disable/Enable"
android:layout_below="#+id/textView2"
android:layout_alignParentLeft="true"
android:layout_marginLeft="21dp" />
</RelativeLayout>
The first element in your layout when you want to use a navigation drawer, should always be a drawerlayout. Taken from the official Android developer site:
To add a navigation drawer, declare your user interface with a
DrawerLayout object as the root view of your layout.
I would highly suggest that you read this from the official android site, and redo your code.
don't add new View in DrawerLayout, it could intercept touch event.
My Android app is a fullscreen OpenGL ES 2.0 app, so the main content is a custom extension of GLSurfaceView.
The activity layout looks like this:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="#+id/drawer_layout">
<FrameLayout android:id="#+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ListView android:id="#+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="#android:color/transparent"
android:dividerHeight="0dp"
android:background="#111" />
</android.support.v4.widget.DrawerLayout>
I then add my GLSurfaceView using the addView method of the FrameLayout.
If i don't do this, the Drawer works as expected.
The ListView seems to be pulled out correctly when i swipe it in, as i can't interact with the GLSurfaceView anymore until i swipe it back to the left. But it's not displayed at all, like the GLSurfaceView is allways rendered ontop of it.
How do i get a DrawerLayout working with a GLSurfaceView as its content?
I've just faced the same problem, and I've found quite a silly workaround for it. This issue seems to only affect DrawerLayouts, and not regular Views. So simply place an empty View over your GLSurfaceView, to mask it away from the Drawer.
Here's my stripped down layout file as a sample for you:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="#+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<GLSurfaceView
android:id="#+id/glSurfaceView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<View
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
<FrameLayout
android:id="#+id/frameLayoutDrawer"
android:layout_width="#dimen/navigation_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="end"
android:background="#android:color/white" />
</android.support.v4.widget.DrawerLayout>