diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java
index 3308efb4..a2abf5d6 100644
--- a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java
+++ b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java
@@ -41,8 +41,8 @@
import com.d4rk.androidtutorials.java.utils.EdgeToEdgeDelegate;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.MobileAds;
-import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
+import com.google.android.material.navigation.NavigationBarView;
import com.google.android.material.navigationrail.NavigationRailView;
import com.google.android.material.snackbar.Snackbar;
import com.google.android.play.core.appupdate.AppUpdateInfo;
@@ -185,18 +185,29 @@ private void launcherShortcuts() {
ShortcutManagerCompat.pushDynamicShortcut(this, shortcut);
}
+ private boolean shouldUseNavigationRail() {
+ return getResources().getConfiguration().smallestScreenWidthDp >= 600;
+ }
+
private void observeViewModel() {
mainViewModel.getUiState().observe(this, uiState -> {
if (uiState == null) {
return;
}
+ boolean useRail = shouldUseNavigationRail();
EdgeToEdgeDelegate edgeToEdgeDelegate = new EdgeToEdgeDelegate(this);
- if (mBinding.navView instanceof BottomNavigationView) {
-
- edgeToEdgeDelegate.applyEdgeToEdgeBottomBar(mBinding.container, mBinding.navView);
+ NavigationBarView navBarView = (NavigationBarView) mBinding.navView;
+ if (useRail) {
+ mBinding.navRail.setVisibility(View.VISIBLE);
+ navBarView.setVisibility(View.GONE);
+ edgeToEdgeDelegate.applyEdgeToEdge(mBinding.container);
+ } else {
+ mBinding.navRail.setVisibility(View.GONE);
+ navBarView.setVisibility(View.VISIBLE);
+ edgeToEdgeDelegate.applyEdgeToEdgeBottomBar(mBinding.container, navBarView);
- ((BottomNavigationView) mBinding.navView).setLabelVisibilityMode(uiState.getBottomNavVisibility());
+ navBarView.setLabelVisibilityMode(uiState.getBottomNavVisibility());
if (mBinding.adView != null) {
if (ConsentUtils.canShowAds(this)) {
MobileAds.initialize(this);
@@ -206,8 +217,6 @@ private void observeViewModel() {
mBinding.adView.setVisibility(View.GONE);
}
}
- } else {
- edgeToEdgeDelegate.applyEdgeToEdge(mBinding.container);
}
NavHostFragment navHostFragment = (NavHostFragment)
@@ -225,15 +234,15 @@ private void observeViewModel() {
.setPopExitAnim(R.anim.fragment_spring_pop_exit)
.build();
- if (mBinding.navView instanceof BottomNavigationView bottomNav) {
- NavigationUI.setupWithNavController(bottomNav, navController);
- bottomNav.setOnItemSelectedListener(item -> {
+ if (useRail) {
+ NavigationUI.setupWithNavController(mBinding.navRail, navController);
+ mBinding.navRail.setOnItemSelectedListener(item -> {
navController.navigate(item.getItemId(), null, springNavOptions);
return true;
});
- } else if (mBinding.navView instanceof NavigationRailView railView) {
- NavigationUI.setupWithNavController(railView, navController);
- railView.setOnItemSelectedListener(item -> {
+ } else {
+ NavigationUI.setupWithNavController(navBarView, navController);
+ navBarView.setOnItemSelectedListener(item -> {
navController.navigate(item.getItemId(), null, springNavOptions);
return true;
});
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 7dd30641..b8e38be0 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -19,12 +19,24 @@
app:title="@string/app_name" />
+
+
@@ -37,10 +49,11 @@
app:adUnitId="@string/ad_banner_unit_id"
app:layout_constraintBottom_toTopOf="@id/nav_view" />
-
\ No newline at end of file
diff --git a/app/src/main/res/menu/bottom_nav_menu.xml b/app/src/main/res/menu/bottom_nav_menu.xml
index 4ff7592a..1125fbb3 100644
--- a/app/src/main/res/menu/bottom_nav_menu.xml
+++ b/app/src/main/res/menu/bottom_nav_menu.xml
@@ -3,13 +3,16 @@
+ android:title="@string/home"
+ android:contentDescription="@string/home" />
+ android:title="@string/android_studio"
+ android:contentDescription="@string/android_studio" />
+ android:title="@string/about"
+ android:contentDescription="@string/about" />
\ No newline at end of file