日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

DrawerLayout侧滑详解

發(fā)布時(shí)間:2025/7/14 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DrawerLayout侧滑详解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
前面我們說了自定義側(cè)滑菜單,也說了SlidingMenu的使用,這一節(jié)我們?cè)賮碚f下DrawerLayout。DrawerLayoutSupport Library包中實(shí)現(xiàn)了側(cè)滑菜單效果的控件,可以說DrawerLayout是因?yàn)榈谌娇丶?/span>SlidingMenu等出現(xiàn)之后,google借鑒而出現(xiàn)的產(chǎn)物。DrawerLayout分為側(cè)邊菜單和主內(nèi)容區(qū)兩部分,側(cè)邊菜單可以根據(jù)手勢(shì)展開與隱藏(drawerLayout自身特性),主內(nèi)容區(qū)的內(nèi)容可以隨著菜單的點(diǎn)擊而變化(這需要使用者自己實(shí)現(xiàn))。drawerLayout其實(shí)是一個(gè)布局控件,跟LinearLayout等控件是一種東西,但是drawerLayout帶有滑動(dòng)的功能。只要按照drawerLayout的規(guī)定布局方式寫完布局,就能有側(cè)滑的效果。
1、DrawerLayout的使用
使用時(shí)直接將DrawerLayout作為根布局,然后其內(nèi)部第一個(gè)View為內(nèi)容區(qū)域,第二個(gè)View為左側(cè)菜單,第三個(gè)View為右側(cè)側(cè)滑菜單,當(dāng)然第三個(gè)是可選的。主內(nèi)容區(qū)的布局代碼要放在側(cè)滑菜單布局的前面,這樣可以幫助DrawerLayout判斷誰是側(cè)滑菜單,誰是主內(nèi)容區(qū); 第一個(gè)View也即主界面的寬高應(yīng)當(dāng)設(shè)置為match_parent。 第二、三個(gè)View需要設(shè)置android:layout_gravity="left",和android:layout_gravity="right"且一般高度設(shè)置為match_parent,寬度為固定值,即側(cè)滑菜單的寬度。 按照上面的描述寫個(gè)布局文件,然后設(shè)置給Activity就添加好了左右側(cè)滑 寫一個(gè)布局 <?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>

看布局文件我們可以知道,左菜單和右菜單我們都是用一個(gè)fragment進(jìn)行實(shí)現(xiàn),具體的代碼就不再寫了,大家可以下載源碼查看

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() {//在這個(gè)方法里可以設(shè)置動(dòng)畫效果 @Override public void onDrawerSlide(View drawerView, float slideOffset) {}// 菜單打開 @Override public void onDrawerOpened(View drawerView) {}// 菜單關(guān)閉 @Override public void onDrawerClosed(View drawerView) {mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, Gravity.RIGHT); }@Override public void onDrawerStateChanged(int newState) {}}); }} drawerLayout菜單的展開與隱藏可以被DrawerLayout.DrawerListener的實(shí)現(xiàn)監(jiān)聽到,這樣你就可以在菜單展開與隱藏發(fā)生的時(shí)候做一些希望做的事情,比如更新actionbar菜單等。如果你的activity有actionbar的話,建議用ActionBarDrawerToggle來監(jiān)聽,這是因?yàn)锳ctionBarDrawerToggle實(shí)現(xiàn)了DrawerListener,所以他能做DrawerListener可以做的任何事情,同時(shí)他還能將drawerLayout的展開和隱藏與actionbar的app 圖標(biāo)關(guān)聯(lián)起來,當(dāng)展開與隱藏的時(shí)候圖標(biāo)有一定的平移效果,點(diǎn)擊圖標(biāo)的時(shí)候還能展開或者隱藏菜單。 在本例中右側(cè)菜單需要點(diǎn)擊才能出現(xiàn),所以在初始化DrawerLayout的時(shí)候,使用了 mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED,Gravity.RIGHT); 意思是關(guān)閉手勢(shì)滑動(dòng)。然后在彈出以后,需要讓手勢(shì)可以滑動(dòng)回去,所以在openRightMenu方法中又調(diào)用 mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED,Gravity.RIGHT); UNLOCK了一下。最后在onDrawerClosed回調(diào)中,繼續(xù)設(shè)置mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED,Gravity.RIGHT); 3、setDrawerListener 通過代碼也能看出來,可以使用setDrawerListener監(jiān)聽菜單的打開與關(guān)閉等等。這里對(duì)于當(dāng)前操作是哪個(gè)菜單的判斷是通過TAG判斷的,使用gravity應(yīng)該也能判斷出來,大家可以試試 由于DrawerLayout默認(rèn)只能從邊界劃出菜單,但是一般側(cè)滑菜單的手勢(shì)區(qū)域都比較大,有興趣的話,可以重寫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

總結(jié)

以上是生活随笔為你收集整理的DrawerLayout侧滑详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。