So this is my activity_main.xml:
<?xml version="1.0" encoding="utf-8"?> <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" tools:context="MainActivity" > <!-- A DrawerLayout is intended to be used as the top-level content view using match_parent for both width and height to consume the full space available. --> <android.support.v4.widget.DrawerLayout android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" > <!-- As the main content view, the view below consumes the entire space available using match_parent in both dimensions. --> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:id="@+id/ll_container" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v7.widget.Toolbar android:id="@+id/my_awesome_toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/black" android:fitsSystemWindows="true" > <TextView android:id="@+id/toolbar_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginStart="10dp" android:textColor="@android:color/white" android:textSize="@dimen/abc_text_size_title_material_toolbar" tools:text="@string/default_toolbar_title"/> </android.support.v7.widget.Toolbar> <FrameLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent"> </FrameLayout> </LinearLayout> <android.support.design.widget.FloatingActionButton android:id="@+id/fab_fuf" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:layout_marginBottom="20dp" android:layout_marginEnd="20dp" android:layout_marginRight="20dp" android:src="@drawable/flamme" app:fabSize="normal" /> </RelativeLayout> <android.support.design.widget.NavigationView android:id="@+id/navigation_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:background="@android:color/black" **app:headerLayout="@layout/drawer_header"** app:itemTextColor="@color/drawer_item_color_selector" app:menu="@menu/menu_drawer"/> </android.support.v4.widget.DrawerLayout> </layout>
and I am using binding for the activity so I don't have to use the findViewById and cast it etc.. like this:
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); Toolbar toolbar = binding.myAwesomeToolbar; toolbarTitle = binding.toolbarTitle; BalrogFontsHelper.SetKhandBoldToView(toolbarTitle); setSupportActionBar(toolbar); final ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setHomeAsUpIndicator(R.drawable.ic_dehaze_white_24); actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); actionBar.setDisplayShowTitleEnabled(false); } drawerLayout = binding.drawerLayout; **tvLoggedUserEmail = (TextView) findViewById(R.id.tv_logged_user_email);** BalrogFontsHelper.SetKhandBoldToView(tvLoggedUserEmail);
As you can see, I can get the views that are directly in the activity_main.xml layout by binding but when the view I am trying to get is not there I can't see the variable in the binding object.
drawer_header.xml:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="96dp" xmlns:tools="http://schemas.android.com/tools" android:background="@android:color/black" android:theme="@style/ThemeOverlay.AppCompat.Dark"> <TextView android:id="@+id/tv_logged_user_email" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="16dp" tools:text="@string/login_placeholder_email" android:textAllCaps="true" android:textAppearance="@style/TextAppearance.AppCompat.Body2" android:textSize="20sp"/> </RelativeLayout>
How could I get this tv_logged_user_email TextView in a binding way so I have:
**tvLoggedUserEmail = binding.tvLoggedUserEmail;**
The user can view the navigation drawer when they swipe the activity's screen from the left edge of the android device. A user can also find it from the activity, by tapping the app icon (also known as the “hamburger” menu) in the action bar.
As for how to switch between activities via the navigation drawer, you can just set up new intents within your selectItem() method: private void selectItem(int position) { // Handle Navigation Options Intent intent; switch (position) { case 0: intent = new Intent(currentActivity, NewActivity.
If you set app:headerLayout="@layout/drawer_header
then you don't have to inflate the view again. You can just use .bind
instead of .inflate
.
You can get the already inflated header view and bind it like this:
View headerView = binding.navigationView.getHeaderView(0); DrawerHeaderBinding headerBinding = DrawerHeaderBinding.bind(headerView);
Solution: Update your Design Support Library to 23.1.1
:
Changes for Design Support library
23.1.1
:
- Added the
getHeaderView
method to theNavigationView
class.- Fixed a transparent background issue for a
FloatingActionButton
object on devices running Android 4.0 (API level 15) and lower. (Issue 183315)
See https://developer.android.com/tools/support-library/index.html for more info
I don't know why there is no method which provides header view attached programmatically.
Instead, here's two solutions:
NavigationView navigationView = (NavigationView) findViewById(R.id.navigation); View headerView = navigationView.inflateHeaderView(R.layout.header_layout) ImageView iv = (ImageView)headerview.findViewById(R.id.your_image_view)
Or:
NavigationView navigationView = (NavigationView) findViewById(R.id.navigation); View headerView = LayoutInflater.from(this).inflate(R.layout.header_layout, navigationView, false); navigationView.addHeaderView(headerView); ImageView iv = (ImageView) headerView.findViewById(R.id.yourImageView)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With