DrawerLayout側滑詳解

前面我們說了自定義側滑菜單,也說了SlidingMenu的使用,這一節我們再來說下DrawerLayout。DrawerLayoutSupport Library包中實現了側滑菜單效果的控件,可以說DrawerLayout是因為第三方控件如SlidingMenu等出現之后,google借鑒而出現的產物。DrawerLayout分為側邊菜單和主內容區兩部分,側邊菜單可以根據手勢展開與隱藏(drawerLayout自身特性),主內容區的內容可以隨著菜單的點擊而變化(這需要使用者自己實現)。drawerLayout其實是一個布局控件,跟LinearLayout等控件是一種東西,但是drawerLayout帶有滑動的功能。只要按照drawerLayout的規定布局方式寫完布局,就能有側滑的效果。
1、DrawerLayout的使用
使用時直接將DrawerLayout作為根布局,然后其內部第一個View為內容區域,第二個View為左側菜單,第三個View為右側側滑菜單,當然第三個是可選的。主內容區的布局代碼要放在側滑菜單布局的前面,這樣可以幫助DrawerLayout判斷誰是側滑菜單,誰是主內容區;
第一個View也即主界面的寬高應當設置為match_parent。
第二、三個View需要設置android:layout_gravity="left",和android:layout_gravity="right"且一般高度設置為match_parent,寬度為固定值,即側滑菜單的寬度。
按照上面的描述寫個布局文件,然后設置給Activity就添加好了左右側滑
寫一個布局
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout 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"
    android:id="@+id/drawer_main_layout"
    tools:context="com.example.drawerlayout.MainActivity">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <Button
            android:id="@+id/btn_main_right"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="OpenRightMenu"
            android:text="打開"
            android:layout_alignParentTop="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true" />

    </RelativeLayout>

    <fragment
        android:id="@+id/id_left_menu"
        android:name="com.example.drawerlayout.fragment.LeftFragment"
        android:layout_width="200dp"
        android:layout_height="match_parent"
        android:layout_gravity="left"
        android:tag="Left" />

    <fragment
        android:id="@+id/id_right_menu"
        android:name="com.example.drawerlayout.fragment.RightFragment"
        android:layout_width="200dp"
        android:layout_height="match_parent"
        android:layout_gravity="right"
        android:tag="RIGHT" />
</android.support.v4.widget.DrawerLayout>

看布局文件我們可以知道,左菜單和右菜單我們都是用一個fragment進行實現,具體的代碼就不再寫了,大家可以下載源碼查看

2、看下MainActivity.java
public class MainActivity extends AppCompatActivity {private DrawerLayout mDrawerLayout;
    private Button mButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initViews();
        setListeners();
    }private void initViews() {mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_main_layout);
        mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED,
                Gravity.RIGHT);
        mButton = (Button) findViewById(R.id.btn_main_right);
    }private void setListeners() {mButton.setOnClickListener(new View.OnClickListener() {@Override
            public void onClick(View view) {mDrawerLayout.openDrawer(Gravity.RIGHT);
                mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED,
                        Gravity.RIGHT);
            }});
        mDrawerLayout.setDrawerListener(new DrawerLayout.SimpleDrawerListener() {//在這個方法里可以設置動畫效果
            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {}// 菜單打開
            @Override
            public void onDrawerOpened(View drawerView) {}// 菜單關閉
            @Override
            public void onDrawerClosed(View drawerView) {mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, Gravity.RIGHT);
            }@Override
            public void onDrawerStateChanged(int newState) {}});
    }}
drawerLayout菜單的展開與隱藏可以被DrawerLayout.DrawerListener的實現監聽到,這樣你就可以在菜單展開與隱藏發生的時候做一些希望做的事情,比如更新actionbar菜單等。如果你的activity有actionbar的話,建議用ActionBarDrawerToggle來監聽,這是因為ActionBarDrawerToggle實現了DrawerListener,所以他能做DrawerListener可以做的任何事情,同時他還能將drawerLayout的展開和隱藏與actionbar的app 圖標關聯起來,當展開與隱藏的時候圖標有一定的平移效果,點擊圖標的時候還能展開或者隱藏菜單。
在本例中右側菜單需要點擊才能出現,所以在初始化DrawerLayout的時候,使用了 mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED,Gravity.RIGHT); 意思是關閉手勢滑動。然后在彈出以后,需要讓手勢可以滑動回去,所以在openRightMenu方法中又調用
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED,Gravity.RIGHT); UNLOCK了一下。最后在onDrawerClosed回調中,繼續設置mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED,Gravity.RIGHT);
3、setDrawerListener
通過代碼也能看出來,可以使用setDrawerListener監聽菜單的打開與關閉等等。這里對于當前操作是哪個菜單的判斷是通過TAG判斷的,使用gravity應該也能判斷出來,大家可以試試
由于DrawerLayout默認只能從邊界劃出菜單,但是一般側滑菜單的手勢區域都比較大,有興趣的話,可以重寫Activity的onTouchEvent在里面判斷
看下效果:

源代碼
參考:
http://blog.csdn.net/lmj623565791/article/details/41531475
http://blog.csdn.net/xiaanming/article/details/18311877
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0925/1713.html
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0303/2522.html
http://wenku.baidu.com/link?url=WyWUhUROnI4F3Ne8PaHTNgmsG1APDWK4WJ1wfoHpOhNyi4rtLqCWslQQSYVF740WFO11pVuVOEBEOi1GvpOCoq9EAynbtLSO2NHAVS6kqjG
http://www.linuxidc.com/Linux/2014-08/105502.htm

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/542275.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/542275.shtml
英文地址,請注明出處:http://en.pswp.cn/news/542275.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

華為筆記本計算機在哪,新一代華為MateBook 的機會在哪里?

2017年5月23日 在德國柏林&#xff0c;華為正式面向全球消費者發布了MateBook系列新品——13英寸靈動商務筆記本MateBook X、12英寸時尚二合一筆記本MateBook E及15.6英寸商務影音筆記本MateBook D。今天筆記本市場似乎是一個比較穩定的市場&#xff0c;筆記本的銷量增長不快&a…

python 字符串 變量_檢查變量是否為字符串的Python程序

python 字符串 變量Python | 檢查變量是否為字符串 (Python | Check if a variable is a string) To check whether a defined variable is a string type or not, we can use two functions which are Python library functions, 要檢查定義的變量是否為字符串類型&#xff0c…

mysql shell

mysql 查詢10分鐘以內的數據:select *from t_agent where int_last_login>CURRENT_TIMESTAMP - INTERVAL 10 MINUTE; mysql關聯多表進行update更新操作UPDATE TrackINNER JOIN MVON Track.trkidMV.mvidSET Track.is_showMV.is_showWHERE trkid<6等同于UPDATE Track,MVSET…

kaggle計算機視覺比賽技巧,9. 計算機視覺 - 9.12. 實戰Kaggle比賽:圖像分類(CIFAR-10) - 《動手學深度學習》 - 書棧網 · BookStack...

9.12. 實戰Kaggle比賽&#xff1a;圖像分類(CIFAR-10)到目前為止&#xff0c;我們一直在用Gluon的data包直接獲取NDArray格式的圖像數據集。然而&#xff0c;實際中的圖像數據集往往是以圖像文件的形式存在的。在本節中&#xff0c;我們將從原始的圖像文件開始&#xff0c;一步…

qthread中獲取當前優先級_Linux中強大的top命令

top命令算是最直觀、好用的查看服務器負載的命令了。它實時動態刷新顯示服務器狀態信息&#xff0c;且可以通過交互式命令自定義顯示內容&#xff0c;非常強大。在終端中輸入top&#xff0c;回車后會顯示如下內容&#xff1a;top - 21:48:39 up 8:57, 2 users, load average: 0…

JavaScript中帶示例的String repeat()方法

JavaScript | 字符串repeat()方法 (JavaScript | String repeat() Method) The String.repeat() method in JavaScript is used to generate a string by repeating the calling string n number of times. n can be any integer from o to any possible number in JavaScript.…

Python生成驗證碼

#!/usr/bin/env python #coding:utf8 import random #方法1&#xff1a; str_codezxcvbnmasdfghjklqwertyuiopZXCVBNMASDFGHJKLQWERTYUIOP0123456789new_codefor i in range(4):   new_coderandom.choice(str_code)print new_code #方法2&#xff1a; new_code[]def str_code…

snmp 獲得硬件信息_計算機網絡基礎課程—簡單網絡管理協議(SNMP)

簡單網絡管理協議(Simple Network Management Protocol)?除了提供網絡層服務的協議和使用那些服務的應用程序&#xff0c;因特網還需要運行一些讓管理員進行設備管理、調試問題、控制路由、監測機器狀態的軟件。這種行為稱為網絡管理。??隨著網絡技術的飛速發展&#xff0c;…

僵尸毀滅工程 服務器已停止運行,《僵尸毀滅工程》steam is not enabled錯誤解決方法...

Steam 上面的 Project Zomboid 因為帶有 VAC 所以建服開服需要 Steam服務器認證&#xff0c;這也是出現 steam is not enabled 錯誤主要原因&#xff0c;也是無法和普通零售正版所建的服務器聯機的罪魁禍首。分兩種情況(下面 Project Zomboid 均簡稱PZ)&#xff1a;1、steam版P…

spring boot 1.4默認使用 hibernate validator

spring boot 1.4默認使用 hibernate validator 5.2.4 Final實現校驗功能。hibernate validator 5.2.4 Final是JSR 349 Bean Validation 1.1的具體實現。 How to disable Hibernate validation in a Spring Boot project As [M. Deinum] mentioned in a comment on my original …

python mpi開銷_GitHub - hustpython/MPIK-Means

并行計算的K-Means聚類算法實現一&#xff0c;實驗介紹聚類是擁有相同屬性的對象或記錄的集合&#xff0c;屬于無監督學習&#xff0c;K-Means聚類算法是其中較為簡單的聚類算法之一&#xff0c;具有易理解&#xff0c;運算深度塊的特點.1.1 實驗內容通過本次課程我們將使用C語…

服務器修改開機啟動項,啟動項設置_服務器開機啟動項

最近很多觀眾老爺在苦覓關于啟動項設置的解答&#xff0c;今天欽編為大家綜合5條解答來給大家解開疑惑&#xff01; 有98%玩家認為啟動項設置_服務器開機啟動項值得一讀&#xff01;啟動項設置1.如何在bios設置硬盤為第一啟動項詳細步驟根據BIOS分類的不同操作不同&#xff1a;…

字符串查找字符出現次數_查找字符串作為子序列出現的次數

字符串查找字符出現次數Description: 描述&#xff1a; Its a popular interview question based of dynamic programming which has been already featured in Accolite, Amazon. 這是一個流行的基于動態編程的面試問題&#xff0c;已經在亞馬遜的Accolite中得到了體現。 Pr…

Ubuntu 忘記密碼的處理方法

Ubuntu系統啟動時選擇recovery mode&#xff0c;也就是恢復模式。接著選擇Drop to root shell prompt ,也就是獲取root權限。輸入命令查看用戶名 cat /etc/shadow &#xff0c;$號前面的是用戶名輸入命令&#xff1a;passwd "用戶名" 回車就可以輸入新密碼了轉載于:…

服務器mdl文件轉換,Simulink Project 中 MDL 到 SLX 模型文件格式的轉換

打開彈體示例項目并將 MDL 文件另存為 SLX運行以下命令以創建并打開“sldemo_slproject_airframe”示例的工作副本。Simulink.ModelManagement.Project.projectDemo(airframe, svn);rebuild_s_functions(no_progress_dialog);Creating sandbox for project.Created example fil…

vue 修改div寬度_Vue 組件通信方式及其應用場景總結(1.5W字)

前言相信實際項目中用過vue的同學&#xff0c;一定對vue中父子組件之間的通信并不陌生&#xff0c;vue中采用良好的數據通訊方式&#xff0c;避免組件通信帶來的困擾。今天筆者和大家一起分享vue父子組件之間的通信方式&#xff0c;優缺點&#xff0c;及其實際工作中的應用場景…

Java System類identityHashCode()方法及示例

系統類identityHashCode()方法 (System class identityHashCode() method) identityHashCode() method is available in java.lang package. identityHashCode()方法在java.lang包中可用。 identityHashCode() method is used to return the hashcode of the given object – B…

Linux中SysRq的使用(魔術鍵)

轉&#xff1a;http://www.chinaunix.net/old_jh/4/902287.html 魔術鍵&#xff1a;Linux Magic System Request Key Hacks 當Linux 系統不能正常響應用戶請求時, 可以使用SysRq小工具控制Linux. 一 SysRq的啟用與關閉 要想啟用SysRq, 需要在配置內核時設置Magic SysRq key (CO…

鏈接服務器訪問接口返回了消息沒有活動事務,因為鏈接服務器 SQLEHR 的 OLE DB 訪問接口 SQLNCLI10 無法啟動分布式事務。...

查看一下MSDTC啟動是否正確1、運行 regedt32&#xff0c;瀏覽至 HKEY_LOCAL_MACHINE\Software\Microsoft\MSDTC。添加一個 DWORD 值 TurnOffRpcSecurity&#xff0c;值數據為 1。2、重啟MS DTC服務。3、打開“管理工具”的“組件服務”。a. 瀏覽至"啟動管理工具"。b.…

micropython 蜂鳴器_基于MicroPython的TPYBoard微信遠程可燃氣體報警器的設計與實現...

前言在我們平時的生活中&#xff0c;經常看到因氣體泄漏發生爆炸事故的新聞。房屋起火、人體中毒等此類的新聞報道層出不窮。這種情況下&#xff0c;人民就發明了可燃氣體報警器。當工業環境、日常生活環境(如使用天然氣的廚房)中可燃性氣體發生泄露&#xff0c;可燃氣體報警器…