From 77486eb85999c89e729be14634e7414eb09bc489 Mon Sep 17 00:00:00 2001 From: OliE Date: Sun, 4 Feb 2018 10:57:07 +0100 Subject: [PATCH] added navigation bottom drawer --- .../health/openscale/gui/MainActivity.java | 51 +++++++++++- .../src/main/res/drawable/nav_item_colors.xml | 5 ++ .../app/src/main/res/layout/activity_main.xml | 81 +++++++++++-------- .../src/main/res/menu/drawer_bottom_view.xml | 26 ++++++ 4 files changed, 129 insertions(+), 34 deletions(-) create mode 100644 android_app/app/src/main/res/drawable/nav_item_colors.xml create mode 100644 android_app/app/src/main/res/menu/drawer_bottom_view.xml diff --git a/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java index 9fb91c4c..26bd3253 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java @@ -16,6 +16,7 @@ package com.health.openscale.gui; +import android.annotation.SuppressLint; import android.app.AlertDialog; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothManager; @@ -31,6 +32,10 @@ import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.preference.PreferenceManager; +import android.support.annotation.NonNull; +import android.support.design.internal.BottomNavigationItemView; +import android.support.design.internal.BottomNavigationMenuView; +import android.support.design.widget.BottomNavigationView; import android.support.design.widget.NavigationView; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; @@ -57,6 +62,8 @@ import com.health.openscale.gui.fragments.OverviewFragment; import com.health.openscale.gui.fragments.StatisticsFragment; import com.health.openscale.gui.fragments.TableFragment; +import java.lang.reflect.Field; + import cat.ereza.customactivityoncrash.config.CaocConfig; @@ -69,6 +76,7 @@ public class MainActivity extends AppCompatActivity { private DrawerLayout drawerLayout; private Toolbar toolbar; private NavigationView navDrawer; + private BottomNavigationView navBottomDrawer; private ActionBarDrawerToggle drawerToggle; @Override @@ -100,6 +108,17 @@ public class MainActivity extends AppCompatActivity { // Find our drawer view navDrawer = (NavigationView) findViewById(R.id.navigation_view); + navBottomDrawer = (BottomNavigationView) findViewById(R.id.navigation_bottom_view); + navBottomDrawer.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { + @Override + public boolean onNavigationItemSelected(@NonNull MenuItem item) { + selectDrawerItem(item.getItemId()); + return true; + } + }); + + disableShiftMode(navBottomDrawer); + //Create Drawer Toggle drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.open_drawer, R.string.close_drawer){ @Override @@ -122,6 +141,8 @@ public class MainActivity extends AppCompatActivity { selectDrawerItem(prefs.getInt("lastFragmentId", R.id.nav_overview)); + navBottomDrawer.setSelectedItemId(prefs.getInt("lastFragmentId", R.id.nav_overview)); + if (prefs.getBoolean("firstStart", true)) { Intent intent = new Intent(this, UserSettingsActivity.class); intent.putExtra(UserSettingsActivity.EXTRA_MODE, UserSettingsActivity.ADD_USER_REQUEST); @@ -219,8 +240,7 @@ public class MainActivity extends AppCompatActivity { @Override public boolean onNavigationItemSelected(MenuItem menuItem) { selectDrawerItem(menuItem.getItemId()); - // Highlight the selected item has been done by NavigationView - menuItem.setChecked(true); + navBottomDrawer.setSelectedItemId(menuItem.getItemId()); return true; } @@ -282,6 +302,9 @@ public class MainActivity extends AppCompatActivity { // Set action bar title setTitle(fragmentTitle); + // Set checked item + navDrawer.setCheckedItem(menuItemId); + // Close the navigation drawer drawerLayout.closeDrawers(); } @@ -432,4 +455,28 @@ public class MainActivity extends AppCompatActivity { bluetoothStatusIcon = iconRessource; bluetoothStatus.setIcon(getResources().getDrawable(bluetoothStatusIcon)); } + + @SuppressLint("RestrictedApi") + public static void disableShiftMode(BottomNavigationView view) { + BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0); + try { + Field shiftingMode = menuView.getClass().getDeclaredField("mShiftingMode"); + shiftingMode.setAccessible(true); + shiftingMode.setBoolean(menuView, false); + shiftingMode.setAccessible(false); + for (int i = 0; i < menuView.getChildCount(); i++) { + BottomNavigationItemView item = (BottomNavigationItemView) menuView.getChildAt(i); + //noinspection RestrictedApi + item.setShiftingMode(false); + item.setPadding(0, 15, 0, 0); + // set once again checked value, so view will be updated + //noinspection RestrictedApi + item.setChecked(item.getItemData().isChecked()); + } + } catch (NoSuchFieldException e) { + Log.e("BNVHelper", "Unable to get shift mode field", e); + } catch (IllegalAccessException e) { + Log.e("BNVHelper", "Unable to change value of shift mode", e); + } + } } diff --git a/android_app/app/src/main/res/drawable/nav_item_colors.xml b/android_app/app/src/main/res/drawable/nav_item_colors.xml new file mode 100644 index 00000000..154000d2 --- /dev/null +++ b/android_app/app/src/main/res/drawable/nav_item_colors.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/android_app/app/src/main/res/layout/activity_main.xml b/android_app/app/src/main/res/layout/activity_main.xml index 5404c9af..26a44953 100644 --- a/android_app/app/src/main/res/layout/activity_main.xml +++ b/android_app/app/src/main/res/layout/activity_main.xml @@ -1,45 +1,62 @@ - - - + android:layout_height="match_parent"> - - + - + android:layout_height="match_parent" + android:weightSum="100" + android:orientation="vertical"> - + + + - - + + - - - + + - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/android_app/app/src/main/res/menu/drawer_bottom_view.xml b/android_app/app/src/main/res/menu/drawer_bottom_view.xml new file mode 100644 index 00000000..3437642e --- /dev/null +++ b/android_app/app/src/main/res/menu/drawer_bottom_view.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + \ No newline at end of file