diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.java b/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.java
index 067e9938d8..c7c616a50e 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.java
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.java
@@ -24,6 +24,8 @@ import androidx.appcompat.app.AlertDialog;
 import androidx.core.content.ContextCompat;
 import androidx.fragment.app.DialogFragment;
 
+import com.google.android.material.dialog.MaterialAlertDialogBuilder;
+
 import org.yuzu.yuzu_emu.activities.EmulationActivity;
 import org.yuzu.yuzu_emu.utils.DocumentsTree;
 import org.yuzu.yuzu_emu.utils.EmulationMenuSettings;
@@ -268,7 +270,7 @@ public final class NativeLibrary {
             final String title = Objects.requireNonNull(Objects.requireNonNull(getArguments()).getString("title"));
             final String message = Objects.requireNonNull(Objects.requireNonNull(getArguments()).getString("message"));
 
-            return new AlertDialog.Builder(emulationActivity)
+            return new MaterialAlertDialogBuilder(emulationActivity)
                     .setTitle(title)
                     .setMessage(message)
                     .setPositiveButton(R.string.continue_button, (dialog, which) -> {
@@ -369,7 +371,7 @@ public final class NativeLibrary {
         } else {
             // Create object used for waiting.
             final Object lock = new Object();
-            AlertDialog.Builder builder = new AlertDialog.Builder(emulationActivity)
+            MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(emulationActivity)
                     .setTitle(caption)
                     .setMessage(text);
 
@@ -451,7 +453,7 @@ public final class NativeLibrary {
         return alertPromptResult;
     }
 
-    public static AlertDialog.Builder displayAlertPromptImpl(String caption, String text, int buttonConfig) {
+    public static MaterialAlertDialogBuilder displayAlertPromptImpl(String caption, String text, int buttonConfig) {
         final EmulationActivity emulationActivity = sEmulationActivity.get();
         alertPromptResult = "";
         alertPromptButton = 0;
@@ -468,7 +470,7 @@ public final class NativeLibrary {
         FrameLayout container = new FrameLayout(emulationActivity);
         container.addView(alertPromptEditText);
 
-        AlertDialog.Builder builder = new AlertDialog.Builder(emulationActivity)
+        MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(emulationActivity)
                 .setTitle(caption)
                 .setView(container)
                 .setPositiveButton(android.R.string.ok, (dialogInterface, i) ->
@@ -536,7 +538,7 @@ public final class NativeLibrary {
             return;
         }
 
-        AlertDialog.Builder builder = new AlertDialog.Builder(emulationActivity)
+        MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(emulationActivity)
                 .setTitle(captionId)
                 .setMessage(Html.fromHtml(emulationActivity.getString(descriptionId), Html.FROM_HTML_MODE_LEGACY))
                 .setPositiveButton(android.R.string.ok, (dialog, whichButton) -> emulationActivity.finish())
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt
index 9b567cc4d1..cbec4836bc 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt
@@ -29,6 +29,7 @@ import org.yuzu.yuzu_emu.features.settings.model.Settings
 import org.yuzu.yuzu_emu.fragments.EmulationFragment
 import org.yuzu.yuzu_emu.fragments.MenuFragment
 import org.yuzu.yuzu_emu.utils.ControllerMappingHelper
+import org.yuzu.yuzu_emu.utils.ThemeHelper
 import kotlin.math.roundToInt
 
 open class EmulationActivity : AppCompatActivity() {
@@ -50,6 +51,8 @@ open class EmulationActivity : AppCompatActivity() {
     }
 
     override fun onCreate(savedInstanceState: Bundle?) {
+        ThemeHelper.setTheme(this)
+
         super.onCreate(savedInstanceState)
         if (savedInstanceState == null) {
             // Get params we were passed
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/GameAdapter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/GameAdapter.kt
index aa50cecfa3..af4ec63f27 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/GameAdapter.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/GameAdapter.kt
@@ -8,9 +8,9 @@ import android.database.DataSetObserver
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
-import androidx.core.content.ContextCompat
 import androidx.fragment.app.FragmentActivity
 import androidx.recyclerview.widget.RecyclerView
+import com.google.android.material.color.MaterialColors
 import org.yuzu.yuzu_emu.R
 import org.yuzu.yuzu_emu.activities.EmulationActivity.Companion.launch
 import org.yuzu.yuzu_emu.model.GameDatabase
@@ -68,11 +68,11 @@ class GameAdapter : RecyclerView.Adapter<GameViewHolder>(), View.OnClickListener
                 holder.regions = cursor!!.getString(GameDatabase.GAME_COLUMN_REGIONS)
                 holder.company = cursor!!.getString(GameDatabase.GAME_COLUMN_CAPTION)
                 val backgroundColorId =
-                    if (isValidGame(holder.path!!)) R.color.view_background else R.color.view_disabled
+                    if (isValidGame(holder.path!!)) R.attr.colorSurface else R.attr.colorErrorContainer
                 val itemView = holder.itemView
                 itemView.setBackgroundColor(
-                    ContextCompat.getColor(
-                        itemView.context,
+                    MaterialColors.getColor(
+                        itemView,
                         backgroundColorId
                     )
                 )
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/applets/SoftwareKeyboard.java b/src/android/app/src/main/java/org/yuzu/yuzu_emu/applets/SoftwareKeyboard.java
index 4aeb414721..894da88011 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/applets/SoftwareKeyboard.java
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/applets/SoftwareKeyboard.java
@@ -19,6 +19,8 @@ import androidx.annotation.Nullable;
 import androidx.appcompat.app.AlertDialog;
 import androidx.fragment.app.DialogFragment;
 
+import com.google.android.material.dialog.MaterialAlertDialogBuilder;
+
 import org.yuzu.yuzu_emu.YuzuApplication;
 import org.yuzu.yuzu_emu.NativeLibrary;
 import org.yuzu.yuzu_emu.R;
@@ -124,7 +126,7 @@ public final class SoftwareKeyboard {
             FrameLayout container = new FrameLayout(emulationActivity);
             container.addView(editText);
 
-            AlertDialog.Builder builder = new AlertDialog.Builder(emulationActivity)
+            MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(emulationActivity)
                     .setTitle(R.string.software_keyboard)
                     .setView(container);
             setCancelable(false);
@@ -227,7 +229,7 @@ public final class SoftwareKeyboard {
                 break;
         }
 
-        new AlertDialog.Builder(emulationActivity)
+        new MaterialAlertDialogBuilder(emulationActivity)
                 .setTitle(R.string.software_keyboard)
                 .setMessage(message)
                 .setPositiveButton(android.R.string.ok, null)
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt
index e0f0674482..1705a72e8e 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt
@@ -3,15 +3,17 @@
 
 package org.yuzu.yuzu_emu.features.settings.ui
 
-import android.app.ProgressDialog
 import android.content.Context
 import android.content.Intent
 import android.content.IntentFilter
 import android.os.Bundle
 import android.view.Menu
 import android.widget.Toast
+import androidx.appcompat.app.AlertDialog
 import androidx.appcompat.app.AppCompatActivity
 import androidx.localbroadcastmanager.content.LocalBroadcastManager
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
+import com.google.android.material.progressindicator.LinearProgressIndicator
 import org.yuzu.yuzu_emu.NativeLibrary
 import org.yuzu.yuzu_emu.R
 import org.yuzu.yuzu_emu.features.settings.model.Settings
@@ -19,12 +21,15 @@ import org.yuzu.yuzu_emu.features.settings.ui.SettingsFragment.Companion.newInst
 import org.yuzu.yuzu_emu.utils.DirectoryInitialization
 import org.yuzu.yuzu_emu.utils.DirectoryStateReceiver
 import org.yuzu.yuzu_emu.utils.EmulationMenuSettings
+import org.yuzu.yuzu_emu.utils.ThemeHelper
 
 class SettingsActivity : AppCompatActivity(), SettingsActivityView {
     private val presenter = SettingsActivityPresenter(this)
-    private var dialog: ProgressDialog? = null
+    private var dialog: AlertDialog? = null
 
     override fun onCreate(savedInstanceState: Bundle?) {
+        ThemeHelper.setTheme(this)
+
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_settings)
         val launcher = intent
@@ -33,6 +38,7 @@ class SettingsActivity : AppCompatActivity(), SettingsActivityView {
         presenter.onCreate(savedInstanceState, menuTag!!, gameID!!)
 
         // Show "Back" button in the action bar for navigation
+        setSupportActionBar(findViewById(R.id.toolbar_settings))
         supportActionBar!!.setDisplayHomeAsUpEnabled(true)
     }
 
@@ -123,9 +129,15 @@ class SettingsActivity : AppCompatActivity(), SettingsActivityView {
 
     override fun showLoading() {
         if (dialog == null) {
-            dialog = ProgressDialog(this)
-            dialog!!.setMessage(getString(R.string.load_settings))
-            dialog!!.isIndeterminate = true
+            val root = layoutInflater.inflate(R.layout.dialog_progress_bar, null)
+            val progressBar = root.findViewById<LinearProgressIndicator>(R.id.progress_bar)
+            progressBar.isIndeterminate = true
+
+            dialog = MaterialAlertDialogBuilder(this)
+                .setTitle(R.string.load_settings)
+                .setView(root)
+                .setCancelable(false)
+                .create()
         }
         dialog!!.show()
     }
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsAdapter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsAdapter.kt
index 03e0adf567..4eac386cca 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsAdapter.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsAdapter.kt
@@ -51,7 +51,7 @@ class SettingsAdapter(
                 HeaderViewHolder(view, this)
             }
             SettingsItem.TYPE_CHECKBOX -> {
-                view = inflater.inflate(R.layout.list_item_setting_checkbox, parent, false)
+                view = inflater.inflate(R.layout.list_item_setting_switch, parent, false)
                 CheckBoxSettingViewHolder(view, this)
             }
             SettingsItem.TYPE_SINGLE_CHOICE, SettingsItem.TYPE_STRING_SINGLE_CHOICE -> {
@@ -105,7 +105,6 @@ class SettingsAdapter(
 
     fun onBooleanClick(item: CheckBoxSetting, position: Int, checked: Boolean) {
         val setting = item.setChecked(checked)
-        notifyItemChanged(position)
         if (setting != null) {
             fragmentView.putSetting(setting)
         }
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/CheckBoxSettingViewHolder.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/CheckBoxSettingViewHolder.kt
index 35d0586db7..3296aed68f 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/CheckBoxSettingViewHolder.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/viewholder/CheckBoxSettingViewHolder.kt
@@ -4,8 +4,9 @@
 package org.yuzu.yuzu_emu.features.settings.ui.viewholder
 
 import android.view.View
-import android.widget.CheckBox
+import android.widget.CompoundButton
 import android.widget.TextView
+import com.google.android.material.materialswitch.MaterialSwitch
 import org.yuzu.yuzu_emu.R
 import org.yuzu.yuzu_emu.features.settings.model.view.CheckBoxSetting
 import org.yuzu.yuzu_emu.features.settings.model.view.SettingsItem
@@ -16,12 +17,12 @@ class CheckBoxSettingViewHolder(itemView: View, adapter: SettingsAdapter) :
     private lateinit var item: CheckBoxSetting
     private lateinit var textSettingName: TextView
     private lateinit var textSettingDescription: TextView
-    private lateinit var checkbox: CheckBox
+    private lateinit var switch: MaterialSwitch
 
     override fun findViews(root: View) {
         textSettingName = root.findViewById(R.id.text_setting_name)
         textSettingDescription = root.findViewById(R.id.text_setting_description)
-        checkbox = root.findViewById(R.id.checkbox)
+        switch = root.findViewById(R.id.switch_widget)
     }
 
     override fun bind(item: SettingsItem) {
@@ -34,11 +35,13 @@ class CheckBoxSettingViewHolder(itemView: View, adapter: SettingsAdapter) :
             textSettingDescription.text = ""
             textSettingDescription.visibility = View.GONE
         }
-        checkbox.isChecked = this.item.isChecked
+        switch.isChecked = this.item.isChecked
+        switch.setOnCheckedChangeListener { _: CompoundButton, _: Boolean ->
+            adapter.onBooleanClick(item, bindingAdapterPosition, switch.isChecked)
+        }
     }
 
     override fun onClick(clicked: View) {
-        checkbox.toggle()
-        adapter.onBooleanClick(item, bindingAdapterPosition, checkbox.isChecked)
+        switch.toggle()
     }
 }
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt
index af0d9f4ff1..2664038852 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt
@@ -27,6 +27,8 @@ class MainActivity : AppCompatActivity(), MainView {
     private val presenter = MainPresenter(this)
 
     override fun onCreate(savedInstanceState: Bundle?) {
+        ThemeHelper.setTheme(this)
+
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_main)
         findViews()
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/InsetsHelper.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/InsetsHelper.kt
new file mode 100644
index 0000000000..3f9acc5b06
--- /dev/null
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/InsetsHelper.kt
@@ -0,0 +1,18 @@
+package org.yuzu.yuzu_emu.utils
+
+import android.content.Context
+
+object InsetsHelper {
+    const val THREE_BUTTON_NAVIGATION = 0
+    const val TWO_BUTTON_NAVIGATION = 1
+    const val GESTURE_NAVIGATION = 2
+
+    fun getSystemGestureType(context: Context): Int {
+        val resources = context.resources
+        val resourceId =
+            resources.getIdentifier("config_navBarInteractionMode", "integer", "android")
+        return if (resourceId != 0) {
+            resources.getInteger(resourceId)
+        } else 0
+    }
+}
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/ThemeHelper.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/ThemeHelper.kt
new file mode 100644
index 0000000000..ce6396e911
--- /dev/null
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/ThemeHelper.kt
@@ -0,0 +1,67 @@
+// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+package org.yuzu.yuzu_emu.utils
+
+import android.app.Activity
+import android.content.res.Configuration
+import android.graphics.Color
+import androidx.annotation.ColorInt
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.content.ContextCompat
+import androidx.core.view.WindowCompat
+import com.google.android.material.color.MaterialColors
+import org.yuzu.yuzu_emu.R
+import kotlin.math.roundToInt
+
+object ThemeHelper {
+    private const val NAV_BAR_ALPHA = 0.9f
+
+    @JvmStatic
+    fun setTheme(activity: AppCompatActivity) {
+        val windowController = WindowCompat.getInsetsController(
+            activity.window,
+            activity.window.decorView
+        )
+        val isLightMode =
+            (activity.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_NO
+        windowController.isAppearanceLightStatusBars = isLightMode
+        windowController.isAppearanceLightNavigationBars = isLightMode
+
+        activity.window.statusBarColor = ContextCompat.getColor(activity, android.R.color.transparent)
+
+        val navigationBarColor =
+            MaterialColors.getColor(activity.window.decorView, R.attr.colorSurface)
+        setNavigationBarColor(activity, navigationBarColor)
+    }
+
+    @JvmStatic
+    fun setNavigationBarColor(activity: Activity, @ColorInt color: Int) {
+        val gestureType = InsetsHelper.getSystemGestureType(activity.applicationContext)
+        val orientation = activity.resources.configuration.orientation
+
+        if ((gestureType == InsetsHelper.THREE_BUTTON_NAVIGATION ||
+                    gestureType == InsetsHelper.TWO_BUTTON_NAVIGATION) &&
+            orientation == Configuration.ORIENTATION_LANDSCAPE
+        ) {
+            activity.window.navigationBarColor = color
+        } else if (gestureType == InsetsHelper.THREE_BUTTON_NAVIGATION ||
+            gestureType == InsetsHelper.TWO_BUTTON_NAVIGATION
+        ) {
+            activity.window.navigationBarColor = getColorWithOpacity(color, NAV_BAR_ALPHA)
+        } else {
+            activity.window.navigationBarColor = ContextCompat.getColor(
+                activity.applicationContext,
+                android.R.color.transparent
+            )
+        }
+    }
+
+    @ColorInt
+    private fun getColorWithOpacity(@ColorInt color: Int, alphaFactor: Float): Int {
+        return Color.argb(
+            (alphaFactor * Color.alpha(color)).roundToInt(), Color.red(color),
+            Color.green(color), Color.blue(color)
+        )
+    }
+}
diff --git a/src/android/app/src/main/res/drawable/gamelist_divider.xml b/src/android/app/src/main/res/drawable/gamelist_divider.xml
deleted file mode 100644
index 7da9dccceb..0000000000
--- a/src/android/app/src/main/res/drawable/gamelist_divider.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<shape xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="rectangle">
-
-    <size
-        android:width="1dp"
-        android:height="1dp" />
-
-    <solid android:color="@color/gamelist_divider" />
-
-</shape>
diff --git a/src/android/app/src/main/res/layout/activity_main.xml b/src/android/app/src/main/res/layout/activity_main.xml
index cea0922a73..34abf955d0 100644
--- a/src/android/app/src/main/res/layout/activity_main.xml
+++ b/src/android/app/src/main/res/layout/activity_main.xml
@@ -5,23 +5,23 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
+    <com.google.android.material.appbar.AppBarLayout
+        android:id="@+id/appbar_main"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        app:liftOnScrollTargetViewId="@id/grid_games">
+
+        <androidx.appcompat.widget.Toolbar
+            android:id="@+id/toolbar_main"
+            android:layout_width="match_parent"
+            android:layout_height="?attr/actionBarSize" />
+
+    </com.google.android.material.appbar.AppBarLayout>
+
     <FrameLayout
         android:id="@+id/games_platform_frame"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         app:layout_behavior="@string/appbar_scrolling_view_behavior" />
 
-    <com.google.android.material.appbar.AppBarLayout
-        android:id="@+id/appbar"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content">
-
-        <androidx.appcompat.widget.Toolbar
-            android:id="@+id/toolbar_main"
-            android:layout_width="match_parent"
-            android:layout_height="?attr/actionBarSize"
-            android:background="?colorPrimary"/>
-
-    </com.google.android.material.appbar.AppBarLayout>
-
 </androidx.coordinatorlayout.widget.CoordinatorLayout>
diff --git a/src/android/app/src/main/res/layout/activity_settings.xml b/src/android/app/src/main/res/layout/activity_settings.xml
index 11b91c45f2..449deab080 100644
--- a/src/android/app/src/main/res/layout/activity_settings.xml
+++ b/src/android/app/src/main/res/layout/activity_settings.xml
@@ -1,5 +1,27 @@
 <?xml version="1.0" encoding="utf-8"?>
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.coordinatorlayout.widget.CoordinatorLayout
+    android:id="@+id/coordinator_main"
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:id="@+id/frame_content" />
+    android:layout_height="match_parent">
+
+    <com.google.android.material.appbar.AppBarLayout
+        android:id="@+id/appbar_settings"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+
+        <androidx.appcompat.widget.Toolbar
+            android:id="@+id/toolbar_settings"
+            android:layout_width="match_parent"
+            android:layout_height="?attr/actionBarSize" />
+
+    </com.google.android.material.appbar.AppBarLayout>
+
+    <FrameLayout
+        android:id="@+id/frame_content"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        app:layout_behavior="@string/appbar_scrolling_view_behavior" />
+
+</androidx.coordinatorlayout.widget.CoordinatorLayout>
diff --git a/src/android/app/src/main/res/layout/card_game.xml b/src/android/app/src/main/res/layout/card_game.xml
index a0d453719e..a107fec0fc 100644
--- a/src/android/app/src/main/res/layout/card_game.xml
+++ b/src/android/app/src/main/res/layout/card_game.xml
@@ -5,7 +5,7 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:background="?attr/selectableItemBackground"
+    android:foreground="?attr/selectableItemBackground"
     android:clickable="true"
     android:clipToPadding="false"
     android:focusable="true"
@@ -15,7 +15,8 @@
     android:paddingBottom="8dp"
     android:transitionName="card_game">
 
-    <androidx.cardview.widget.CardView
+    <com.google.android.material.card.MaterialCardView
+        style="?attr/materialCardViewElevatedStyle"
         android:id="@+id/card_game_art"
         android:layout_width="150dp"
         android:layout_height="150dp"
@@ -32,24 +33,24 @@
 
         <TextView
             android:id="@+id/text_game_title_inner"
-            style="@android:style/TextAppearance.Material.Subhead"
+            style="@style/TextAppearance.Material3.BodyLarge"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:ellipsize="end"
-            android:gravity="center|top"
+            android:gravity="center"
             android:maxLines="2"
             android:paddingLeft="2dp"
             android:paddingRight="2dp"
             android:paddingTop="8dp"
             android:visibility="visible"
-            tools:text="The Legend of Zelda: The Wind Waker" />
+            tools:text="Super Mario Odyssey" />
 
-    </androidx.cardview.widget.CardView>
+    </com.google.android.material.card.MaterialCardView>
 
     <TextView
         android:id="@+id/text_game_title"
-        style="@android:style/TextAppearance.Material.Subhead"
-        android:layout_width="150dp"
+        style="@style/TextAppearance.Material3.BodyLarge"
+        android:layout_width="0dp"
         android:layout_height="wrap_content"
         android:ellipsize="end"
         android:maxLines="2"
@@ -57,12 +58,12 @@
         app:layout_constraintEnd_toEndOf="@+id/card_game_art"
         app:layout_constraintStart_toStartOf="@+id/card_game_art"
         app:layout_constraintTop_toBottomOf="@+id/card_game_art"
-        tools:text="The Legend of Zelda: The Wind Waker" />
+        tools:text="Super Mario Odyssey" />
 
     <TextView
         android:id="@+id/text_game_caption"
-        style="@android:style/TextAppearance.Material.Caption"
-        android:layout_width="150dp"
+        style="@style/TextAppearance.Material3.BodyMedium"
+        android:layout_width="0dp"
         android:layout_height="wrap_content"
         android:ellipsize="end"
         android:lines="1"
diff --git a/src/android/app/src/main/res/layout/dialog_checkbox.xml b/src/android/app/src/main/res/layout/dialog_checkbox.xml
deleted file mode 100644
index c0f307117a..0000000000
--- a/src/android/app/src/main/res/layout/dialog_checkbox.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
-    android:paddingTop="5dp"
-    android:paddingLeft="20dp"
-    android:paddingRight="20dp"
-    android:paddingBottom="0dp"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-
-    <CheckBox
-        android:id="@+id/checkBox"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:text="@string/do_not_show_this_again" />
-</LinearLayout>
diff --git a/src/android/app/src/main/res/layout/dialog_progress_bar.xml b/src/android/app/src/main/res/layout/dialog_progress_bar.xml
index a81157a29f..1dbfd4f7b3 100644
--- a/src/android/app/src/main/res/layout/dialog_progress_bar.xml
+++ b/src/android/app/src/main/res/layout/dialog_progress_bar.xml
@@ -1,26 +1,15 @@
 <?xml version="1.0" encoding="utf-8"?>
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
     android:layout_height="match_parent"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:orientation="vertical">
 
-    <ProgressBar
+    <com.google.android.material.progressindicator.LinearProgressIndicator
         android:id="@+id/progress_bar"
-        style="?android:attr/progressBarStyleHorizontal"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_marginLeft="@dimen/spacing_large"
-        android:layout_marginRight="@dimen/spacing_large"
-        android:layout_alignParentEnd="true"
-        android:layout_below="@+id/progress_text"
-        android:layout_alignParentStart="true"/>
+        android:layout_margin="24dp"
+        app:trackCornerRadius="4dp" />
 
-    <TextView
-        android:id="@+id/progress_text"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginLeft="@dimen/spacing_large"
-        android:layout_marginRight="@dimen/spacing_large"
-        android:gravity="right"
-        android:text="1/100" />
-</LinearLayout>
\ No newline at end of file
+</LinearLayout>
diff --git a/src/android/app/src/main/res/layout/fragment_emulation.xml b/src/android/app/src/main/res/layout/fragment_emulation.xml
index 729a986dbf..c2eb097f9e 100644
--- a/src/android/app/src/main/res/layout/fragment_emulation.xml
+++ b/src/android/app/src/main/res/layout/fragment_emulation.xml
@@ -6,6 +6,17 @@
     tools:context="org.yuzu.yuzu_emu.fragments.EmulationFragment">
 
     <!-- This is what everything is rendered to during emulation -->
+    <Button
+        android:id="@+id/done_control_config"
+        style="@style/Widget.Material3.Button.Icon"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:padding="@dimen/spacing_small"
+        android:text="@string/emulation_done"
+        android:visibility="gone" />
+
+    <!-- This is the onscreen input overlay -->
     <SurfaceView
         android:id="@+id/surface_emulation"
         android:layout_width="match_parent"
@@ -13,20 +24,12 @@
         android:focusable="false"
         android:focusableInTouchMode="false" />
 
-    <!-- This is the onscreen input overlay -->
-    <org.yuzu.yuzu_emu.overlay.InputOverlay
-        android:id="@+id/surface_input_overlay"
-        android:layout_height="match_parent"
-        android:layout_width="match_parent"
-        android:focusable="true"
-        android:focusableInTouchMode="true" />
-
     <TextView
         android:id="@+id/show_fps_text"
-        android:layout_marginStart="18dp"
-        android:layout_marginTop="2dp"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
+        android:layout_marginStart="18dp"
+        android:layout_marginTop="2dp"
         android:clickable="false"
         android:linksClickable="false"
         android:longClickable="false"
@@ -34,15 +37,11 @@
         android:textColor="@android:color/white"
         android:textSize="12sp" />
 
-    <Button
-        android:id="@+id/done_control_config"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center"
-        android:padding="@dimen/spacing_small"
-        android:background="@color/citra_orange"
-        android:text="@string/emulation_done"
-        android:visibility="gone" />
+    <org.yuzu.yuzu_emu.overlay.InputOverlay
+        android:id="@+id/surface_input_overlay"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:focusable="true"
+        android:focusableInTouchMode="true" />
 
 </FrameLayout>
-t>
diff --git a/src/android/app/src/main/res/layout/fragment_settings.xml b/src/android/app/src/main/res/layout/fragment_settings.xml
index b44e77297c..13780927ec 100644
--- a/src/android/app/src/main/res/layout/fragment_settings.xml
+++ b/src/android/app/src/main/res/layout/fragment_settings.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<org.yuzu.yuzu_emu.features.settings.ui.SettingsFrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<org.yuzu.yuzu_emu.features.settings.ui.SettingsFrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
@@ -7,6 +8,6 @@
         android:id="@+id/list_settings"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:background="@color/view_background" />
+        android:background="?attr/colorSurface" />
 
-</org.yuzu.yuzu_emu.features.settings.ui.SettingsFrameLayout>
\ No newline at end of file
+</org.yuzu.yuzu_emu.features.settings.ui.SettingsFrameLayout>
diff --git a/src/android/app/src/main/res/layout/list_item_setting.xml b/src/android/app/src/main/res/layout/list_item_setting.xml
index df83684f75..1df218302e 100644
--- a/src/android/app/src/main/res/layout/list_item_setting.xml
+++ b/src/android/app/src/main/res/layout/list_item_setting.xml
@@ -8,20 +8,19 @@
     android:focusable="true"
     android:gravity="center_vertical"
     android:minHeight="72dp"
-    android:paddingTop="@dimen/spacing_large"
-    android:paddingBottom="@dimen/spacing_large">
+    android:paddingBottom="@dimen/spacing_large"
+    android:paddingTop="@dimen/spacing_large">
 
     <TextView
         android:id="@+id/text_setting_name"
-        style="@style/TextAppearance.AppCompat.Headline"
+        style="@style/TextAppearance.Material3.HeadlineMedium"
         android:layout_width="0dp"
         android:layout_height="wrap_content"
+        android:layout_alignParentEnd="true"
         android:layout_alignParentStart="true"
         android:layout_alignParentTop="true"
-        android:layout_alignParentEnd="true"
-        android:layout_marginStart="@dimen/spacing_large"
         android:layout_marginEnd="@dimen/spacing_large"
-        android:textColor="@color/header_text"
+        android:layout_marginStart="@dimen/spacing_large"
         android:textSize="16sp"
         tools:text="Setting Name" />
 
@@ -29,15 +28,14 @@
         android:id="@+id/text_setting_description"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_below="@+id/text_setting_name"
-        android:layout_alignStart="@+id/text_setting_name"
-        android:layout_alignParentStart="true"
         android:layout_alignParentEnd="true"
+        android:layout_alignParentStart="true"
+        android:layout_alignStart="@+id/text_setting_name"
+        android:layout_below="@+id/text_setting_name"
+        android:layout_marginEnd="@dimen/spacing_large"
         android:layout_marginStart="@dimen/spacing_large"
         android:layout_marginTop="@dimen/spacing_small"
-        android:layout_marginEnd="@dimen/spacing_large"
         android:visibility="visible"
-        tools:text="@string/app_disclaimer"
-        android:textColor="@color/header_subtext" />
+        tools:text="@string/app_disclaimer" />
 
-</RelativeLayout>
\ No newline at end of file
+</RelativeLayout>
diff --git a/src/android/app/src/main/res/layout/list_item_setting_checkbox.xml b/src/android/app/src/main/res/layout/list_item_setting_switch.xml
similarity index 76%
rename from src/android/app/src/main/res/layout/list_item_setting_checkbox.xml
rename to src/android/app/src/main/res/layout/list_item_setting_switch.xml
index 86ba83f117..5315be3ae6 100644
--- a/src/android/app/src/main/res/layout/list_item_setting_checkbox.xml
+++ b/src/android/app/src/main/res/layout/list_item_setting_switch.xml
@@ -3,25 +3,18 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:minHeight="72dp"
     android:background="?android:attr/selectableItemBackground"
+    android:clickable="true"
     android:focusable="true"
-    android:clickable="true">
+    android:minHeight="72dp">
 
-    <TextView
-        android:id="@+id/text_setting_name"
-        style="@style/TextAppearance.AppCompat.Headline"
-        android:layout_width="0dp"
+    <com.google.android.material.materialswitch.MaterialSwitch
+        android:id="@+id/switch_widget"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_alignParentStart="true"
-        android:layout_alignParentTop="true"
-        android:layout_marginEnd="@dimen/spacing_large"
-        android:layout_marginStart="@dimen/spacing_large"
-        android:layout_marginTop="@dimen/spacing_large"
-        android:layout_toStartOf="@+id/checkbox"
-        android:textColor="@color/header_text"
-        android:textSize="16sp"
-        tools:text="@string/frame_limit_enable" />
+        android:layout_alignParentEnd="true"
+        android:layout_centerVertical="true"
+        android:layout_marginEnd="24dp" />
 
     <TextView
         android:id="@+id/text_setting_description"
@@ -34,19 +27,22 @@
         android:layout_marginEnd="@dimen/spacing_large"
         android:layout_marginStart="@dimen/spacing_large"
         android:layout_marginTop="@dimen/spacing_small"
-        android:layout_toStartOf="@+id/checkbox"
+        android:layout_toStartOf="@+id/switch_widget"
         android:textAlignment="textStart"
-        android:textColor="@color/header_subtext"
         tools:text="@string/frame_limit_enable_description" />
 
-    <CheckBox
-        android:id="@+id/checkbox"
-        android:layout_width="wrap_content"
+    <TextView
+        style="@style/TextAppearance.Material3.HeadlineMedium"
+        android:id="@+id/text_setting_name"
+        android:layout_width="0dp"
         android:layout_height="wrap_content"
-        android:layout_alignParentEnd="true"
-        android:layout_centerVertical="true"
+        android:layout_alignParentStart="true"
+        android:layout_alignParentTop="true"
         android:layout_marginEnd="@dimen/spacing_large"
-        android:focusable="false"
-        android:clickable="false" />
+        android:layout_marginStart="@dimen/spacing_large"
+        android:layout_marginTop="@dimen/spacing_large"
+        android:layout_toStartOf="@+id/switch_widget"
+        android:textSize="16sp"
+        tools:text="@string/frame_limit_enable" />
 
-</RelativeLayout>
\ No newline at end of file
+</RelativeLayout>
diff --git a/src/android/app/src/main/res/layout/list_item_settings_header.xml b/src/android/app/src/main/res/layout/list_item_settings_header.xml
index d220dfd615..9debb7ba55 100644
--- a/src/android/app/src/main/res/layout/list_item_settings_header.xml
+++ b/src/android/app/src/main/res/layout/list_item_settings_header.xml
@@ -6,14 +6,15 @@
 
     <TextView
         android:id="@+id/text_header_name"
-        android:layout_width="wrap_content"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_gravity="center_vertical"
-        android:layout_marginStart="@dimen/spacing_large"
+        android:layout_gravity="start|center_vertical"
+        android:layout_marginHorizontal="@dimen/spacing_large"
         android:layout_marginBottom="@dimen/spacing_small"
         android:layout_marginTop="@dimen/spacing_small"
-        android:textColor="?android:colorAccent"
+        android:textColor="?attr/colorPrimary"
+        android:textAlignment="viewStart"
         android:textStyle="bold"
         tools:text="CPU Settings" />
 
-</FrameLayout>
\ No newline at end of file
+</FrameLayout>
diff --git a/src/android/app/src/main/res/layout/premium_item_setting.xml b/src/android/app/src/main/res/layout/premium_item_setting.xml
index 17d5a13b25..171dd175f3 100644
--- a/src/android/app/src/main/res/layout/premium_item_setting.xml
+++ b/src/android/app/src/main/res/layout/premium_item_setting.xml
@@ -8,20 +8,20 @@
     android:focusable="true"
     android:gravity="center_vertical"
     android:minHeight="72dp"
-    android:paddingTop="@dimen/spacing_large"
-    android:paddingBottom="@dimen/spacing_large">
+    android:paddingBottom="@dimen/spacing_large"
+    android:paddingTop="@dimen/spacing_large">
 
     <TextView
+        style="@style/TextAppearance.Material3.HeadlineMedium"
         android:id="@+id/text_setting_name"
-        style="@style/TextAppearance.AppCompat.Headline"
         android:layout_width="0dp"
         android:layout_height="wrap_content"
+        android:layout_alignParentEnd="true"
         android:layout_alignParentStart="true"
         android:layout_alignParentTop="true"
-        android:layout_alignParentEnd="true"
-        android:layout_marginStart="@dimen/spacing_large"
         android:layout_marginEnd="@dimen/spacing_large"
-        android:textColor="?android:colorAccent"
+        android:layout_marginStart="@dimen/spacing_large"
+        android:textColor="?attr/colorPrimary"
         android:textStyle="bold"
         tools:text="Setting Name" />
 
@@ -29,15 +29,14 @@
         android:id="@+id/text_setting_description"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_below="@+id/text_setting_name"
-        android:layout_alignStart="@+id/text_setting_name"
-        android:layout_alignParentStart="true"
         android:layout_alignParentEnd="true"
+        android:layout_alignParentStart="true"
+        android:layout_alignStart="@+id/text_setting_name"
+        android:layout_below="@+id/text_setting_name"
+        android:layout_marginEnd="@dimen/spacing_large"
         android:layout_marginStart="@dimen/spacing_large"
         android:layout_marginTop="@dimen/spacing_small"
-        android:layout_marginEnd="@dimen/spacing_large"
         android:visibility="visible"
-        tools:text="@string/app_disclaimer"
-        android:textColor="@color/header_subtext" />
+        tools:text="@string/app_disclaimer" />
 
-</RelativeLayout>
\ No newline at end of file
+</RelativeLayout>
diff --git a/src/android/app/src/main/res/menu/menu_game_grid.xml b/src/android/app/src/main/res/menu/menu_game_grid.xml
index 6211f54942..b834a444e8 100644
--- a/src/android/app/src/main/res/menu/menu_game_grid.xml
+++ b/src/android/app/src/main/res/menu/menu_game_grid.xml
@@ -7,27 +7,34 @@
         android:icon="@drawable/ic_folder"
         android:title="@string/select_game_folder"
         app:showAsAction="ifRoom">
+
         <menu>
+
             <item
                 android:id="@+id/button_add_directory"
                 android:icon="@drawable/ic_folder"
                 android:title="@string/select_game_folder"
                 app:showAsAction="ifRoom" />
+
             <item
                 android:id="@+id/button_install_keys"
                 android:icon="@drawable/ic_install"
                 android:title="@string/install_keys"
                 app:showAsAction="ifRoom" />
+
             <item
                 android:id="@+id/button_select_gpu_driver"
-                android:icon="@drawable/ic_settings_core"
+                android:icon="@drawable/ic_settings"
                 android:title="@string/select_gpu_driver"
                 app:showAsAction="ifRoom" />
+
         </menu>
+
     </item>
+
     <item
         android:id="@+id/menu_settings_core"
-        android:icon="@drawable/ic_settings_core"
+        android:icon="@drawable/ic_settings"
         android:title="@string/grid_menu_core_settings"
         app:showAsAction="ifRoom" />