Add Header Layout to NavigationView on Android

activity_main.xml

    <android.support.design.widget.NavigationView
        android:id="@+id/navigationView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="end"
        app:menu="@menu/drawer_menu"
        app:headerLayout="@layout/drawer_header">

    </android.support.design.widget.NavigationView>

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

    <Spinner
        android:id="@+id/spinnerProfile"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_gravity="center"
        android:layout_marginEnd="20dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="20dp"
        android:layout_marginStart="10dp"
        android:layout_marginTop="30dp"
        android:layout_marginBottom="-20dp"
        android:gravity="center" />
</RelativeLayout>

MainActivity.java

        View headerView= navigationView.getHeaderView(0);
        spinnerProfile= (Spinner) headerView.findViewById(R.id.spinnerProfile);

References
http://www.technotalkative.com/part-4-playing-with-navigationview/

Add Spinner as an item in Navigation Drawer on Android

Step 1. Please add item in menu.xml

 <item
            android:id="@+id/navigation_drawer_item3"
            android:icon="@android:drawable/ic_menu_share"
            android:title=""
            app:actionLayout="@layout/spinner"/> 

Step 2. Please create layout for spinner view

<Spinner xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/spinner"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center_vertical"
    android:gravity="center_vertical" />

Step 3. set spinner data in your activity file

Spinner spinner = (Spinner) navigationView.getMenu().findItem(R.id.navigation_drawer_item3).getActionView();
    spinner.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item,language));
    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {  
          Toast.makeText(MainActivity.this,language[position],Toast.LENGTH_SHORT).show();
        }
        @Override
        public void onNothingSelected(AdapterView<?> parent) {
        }
    });

Step 4. please add android support design library into project if need.

References
https://github.com/mhdr/AndroidSamples/tree/master/092
https://stackoverflow.com/questions/37696653/how-to-add-spinner-as-an-item-in-navigation-drawer
https://stackoverflow.com/questions/34847464/how-to-add-spinner-on-navigationview

Select Menu Item of Navigation Drawer on Android

    NavigationView.OnNavigationItemSelectedListener navigationView_OnNavigationItemSelectedListener = new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {

            // uncheck other menus and sub menus
            int menuSize = navigationView.getMenu().size();

            for (int i = 0; i < menuSize; i++) {
                MenuItem menuItem = navigationView.getMenu().getItem(i);

                if (menuItem.hasSubMenu()) {
                    int submenuSize = menuItem.getSubMenu().size();

                    for (int j = 0; j < submenuSize; j++) {
                        MenuItem subItem = menuItem.getSubMenu().getItem(j);
                        subItem.setChecked(false);
                    }
                } else {
                    menuItem.setChecked(false);
                }
            }

            item.setChecked(true);

            if (item.getItemId() == R.id.itemMenuExit) {

                finish();
                System.exit(0);
                return true;
            }

            return false;
        }
    };

References
https://github.com/mhdr/AndroidSamples/tree/master/091

Right to Left Menu Items of Navigation Drawer on Android

navigationView= (NavigationView) findViewById(R.id.navigationView);
ViewCompat.setLayoutDirection(navigationView,ViewCompat.LAYOUT_DIRECTION_RTL);

Or

<android.support.design.widget.NavigationView
android:layoutDirection="rtl"
android:id="@+id/navigation_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="right"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer" />

References
https://stackoverflow.com/questions/38848821/android-right-to-left-navigationdrawer-menu-items-arent-rtl
https://github.com/mhdr/AndroidSamples/tree/master/090

Android Right to Left PopupMenu with ListPopupWindow

weight_table_menu.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="wrap_content">

    <TextView
        android:id="@+id/textViewTableMenuItem"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:text="ویرایش"
        android:paddingRight="12dp"
        android:paddingEnd="12dp"
        android:paddingTop="8dp"
        android:paddingBottom="10dp"
        android:textColor="@android:color/black"
        android:textSize="16sp"/>

</RelativeLayout>

WeightTableAdapter.java

String[] menuItems = context.getResources().getStringArray(R.array.table_menu);
                ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, R.layout.weight_table_menu,
                        R.id.textViewTableMenuItem, menuItems);

                final ListPopupWindow listPopupWindow = new ListPopupWindow(context);
                listPopupWindow.setAdapter(adapter);
                listPopupWindow.setAnchorView(button);
                listPopupWindow.setWidth(420);
                listPopupWindow.setHeight(ListPopupWindow.WRAP_CONTENT);
                listPopupWindow.setHorizontalOffset(-380);
                listPopupWindow.setVerticalOffset(-50);
                //listPopupWindow.setContentWidth(200);

                listPopupWindow.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        if (position==0)
                        {

                        }
                        else if (position==1)
                        {
                            historyList.remove(viewHolder.getAdapterPosition());
                            notifyItemRemoved(viewHolder.getAdapterPosition());
                        }

                        listPopupWindow.dismiss();
                    }
                });

                listPopupWindow.show();

References
https://stackoverflow.com/questions/9906786/display-listpopupwindow-on-most-left-of-the-screen

Android Work with PopupMenu

PopupMenu popup = new PopupMenu(context, button);
                popup.inflate(R.menu.weight_table_menu);
                //popup.setGravity(Gravity.END);

                popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        switch (item.getItemId()) {
                            case R.id.menuItemDelete:

                                //

                                historyList.remove(viewHolder.getAdapterPosition());
                                notifyItemRemoved(viewHolder.getAdapterPosition());
                                return true;

                            case R.id.menuItemEdit:

                                //

                                return true;
                        }
                        return false;
                    }
                });

                popup.show();