Android App 側邊欄菜單的簡單實現

来源:https://www.cnblogs.com/ymtianyu/archive/2020/07/01/13217325.html
-Advertisement-
Play Games

想要實現側邊欄,需要配合使用DrawerLayout。因為會用到嵌套佈局,所以根佈局不能是 ConstraintLayout,DrawerLayout 佈局下再嵌套兩個佈局,一個放置內容如 LinearLayout,一個放置側劃菜單,這裡使用 NavigationView 為了出現側邊欄點擊圖標和菜... ...


Layout

註意事項

想要實現側邊欄,需要配合使用DrawerLayout。因為會用到嵌套佈局,所以根佈局不能是 ConstraintLayout,最好使用 LinearLayout 佈局。

DrawerLayout 佈局下再嵌套兩個佈局,一個放置內容如 LinearLayout,一個放置側劃菜單,這裡使用 NavigationView

為了出現側邊欄點擊圖標和菜單圖標,需要自定義一個 ToolBar,放置在內容 Layout 里

重點

側劃菜單 NavigationView 一定要設置 android:layout_gravity="start"

實例
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ebook.EbookActivity">

    <androidx.drawerlayout.widget.DrawerLayout
        android:id="@+id/drawer_ebook"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <androidx.appcompat.widget.Toolbar
                android:id="@+id/main_menu_ebook"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
            <TextView
                android:id="@+id/bookContent"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
        </LinearLayout>

        <com.google.android.material.navigation.NavigationView
            android:id="@+id/navigation_ebook"
            android:layout_width="230dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            app:headerLayout="@layout/navigation_ebook_header"
            app:menu="@menu/menu_drawer_ebook"/>
    </androidx.drawerlayout.widget.DrawerLayout>
</LinearLayout>

Activity

綁定側劃監聽事件

private lateinit var mBinding: ActivityEbookBinding
private lateinit var mDrawerToggle: ActionBarDrawerToggle

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    mBinding = ActivityEbookBinding.inflate(layoutInflater)
    setContentView(mBinding.root)
    setSupportActionBar(mBinding.mainMenuEbook)
    initialData()
}

private fun initialData(){
    //初使化側邊欄監聽事件
    mDrawerToggle = ActionBarDrawerToggle(this, mBinding.drawerEbook, mBinding.mainMenuEbook, R.string.openDrawerContentDesc, R.string.closeDrawerContentDesc)
    mDrawerToggle.syncState()
    //綁定側邊欄監聽事件
    mBinding.drawerEbook.addDrawerListener(mDrawerToggle)

    //側邊欄菜單圖標顏色恢復正常,而非預設的灰色
    mBinding.navigationEbook.itemIconTintList = null
    //綁定側邊欄菜單點擊事件
    mBinding.navigationEbook.setNavigationItemSelectedListener { item: MenuItem ->
        when(item.itemId){
            R.id.menu_drawer_ebook_setting -> showSnackBar(mBinding.navigationEbook,"menu_drawer_setting")
            R.id.menu_drawer_ebook_close -> finish()
        }
        true
    }
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • MySQL補充——忘記密碼怎麼辦 摘要:本文主要記錄了在忘記密碼時怎麼辦。 部分內容來自以下博客: https://www.cnblogs.com/wuotto/p/9682400.html 關閉MySQL資料庫 使用命令檢查MySQL資料庫是否已經關閉: 1 [root@localhost ~]# ...
  • DELETE FROM Persons WHERE Id NOT IN (SELECT MIN(Id)AS id FROM Persons GROUP BY Email) ; You can't specify target table 'Person' for update in FROM cla ...
  • MySQL補充——獲取自增主鍵的下一個自增值 摘要:本文主要學習瞭如何獲得自增主鍵的下一個值。 格式 1 select auto_increment from information_schema.tables where table_schema='資料庫名' and table_name='表名 ...
  • 文章前言 提到記憶體管理,我們就需要考慮Redis的記憶體過期策略和記憶體淘汰機制。該文章便從這兩方面入手,分享一些在Redis記憶體方面相關的基礎知識。 文章中使用的示例版本為Redis5.0版本。 記憶體過期策略 記憶體過期策略主要的作用就是,在緩存過期之後,能夠及時的將失效的緩存從記憶體中刪除,以減少記憶體的 ...
  • 本文更新於2019-06-16,使用MySQL 5.7,操作系統為Deepin 15.4。 常用字元集 字元集 定長 代碼寬度 說明 ASCII或ISO-646 是 1位元組7位 英文字母、數字、標點符號和33個控制符 ISO-8859系列 是 1位元組8位 各西歐字元集,相容ASCII GB2312 ...
  • 前一陣領導安排了一個任務:定時將集團資料庫某表的數據同步至我們公司伺服器的資料庫,感覺比寫增刪改查SQL有趣,特意記錄下來,希望能幫到有類似需求的小伙伴,如有錯誤也希望各位不吝指教 環境描述: 集團資料庫:Oracle 11g 部門資料庫:Oracle 11g 使用的軟體:PLSQL Develop ...
  • 教程 美團外賣Flutter動態化實踐 插件 native-draggable Native Drag and Drop for Flutter on iOS and MacOS flutter-mvvm Flutter plugin to rapidly create a Page with MV ...
  • 前言 上半年我定的OKR目標是幫助團隊將App切入Flutter,實現統一技術棧,變革成多端融合開發模式。Flutter目前是跨平臺方案中最有潛力實現我們這個目標的,不管是Hybird還是React Native,我們的項目都有落地應用,跨平臺一直是終端團隊所追求的技術,能夠快速研發和部署也是我們不 ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...