多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > 【Android界面實現】使用ActionBar和DrawerLayout純原生控件,實現側滑欄和滑動Tab界面

【Android界面實現】使用ActionBar和DrawerLayout純原生控件,實現側滑欄和滑動Tab界面

來源:程序員人生   發布時間:2014-11-09 08:36:41 閱讀次數:8996次

    轉載請注明出處:http://blog.csdn.net/zhaokaiqiang1992

    在前面的文章中,我們使用第3方開源控件,比如說是SlidingMenu和PagerSlidingTabStrip,實現過側滑欄和滑動Tab界面。但是在support-v4包中,提供了原生的側滑欄控件DrawerLayout,而滑動的Tab效果,我們可使用ViewPager和ActionBar上的Tab來進行實現。所以在今天的文章里面,我們將介紹如何將DrawerLayout與ActionBar進行整合,使用純原生的控件來實現我們想要的效果。

    首先,先看1下終究的實現效果。



    除實現了側滑欄和可以滑動的Tab頁,還順便加上了ActionBar上的Menu和ShareActionProvider,可以實現簡單的分享功能,下面,給大家介紹實現的具體進程。

    首先看1下全部項目的目錄結構



    MainActivity是主界面,MenuAdapter是菜單的listview的適配器,PlaceholderFragment是Fragment的子類,SectionsPagerAdapter是ViewPager的適配器。

    res文件夾中的文件則是對應的布局文件,main是ActionBar的菜單布局。

    首先,如果我們想用DrawerLayout,我們必須在xml布局進行聲明

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="match_parent" /> <ListView android:id="@+id/left_drawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:background="#ccffffff" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" /> </android.support.v4.widget.DrawerLayout>

    上面的代碼是主界面的布局代碼,DrawerLayout必須作為根布局,在里面我們嵌套了1個ViewPager用來實現Tab頁的滑動,要注意的是,下面的ListView就是側滑欄的布局,我們固然可以用其他的布局來實現。我們如果想控制側滑欄的滑出方向,我們應當使用layout_gravity屬性來設置,比如說是left/right或是start/end。如果我們想使用DrawerLayout布局那末我們的主布局必須是第1個子控件,并且寬和高必須是match_parent,比如我們上面的ViewPager的使用。而我們的側滑欄的布局,必須緊跟在主布局的后面,而且要通過layout_gravity來設置滑出的方向。通常我們給側滑欄的寬度設置1個固定的大小,高度設置成match_parent。

    為了把DrawerLayout綁定到我們需要的Activity上,并定義相干的事件回調,我們需要定義1個ActionBarDrawerToggle對象來完成這項工作,比如,下面的代碼就實現了我們想要的功能

// 將DrawerLayout布局綁定到當前界面,并設置點擊事件 mDrawerToggle = new ActionBarDrawerToggle(this, /* 宿主 Activity */ mDrawerLayout, /* 需要綁定的DrawerLayout對象 */ R.drawable.ic_drawer, /* 用于替換向上的圖片 */ R.string.drawer_open, /* "open drawer" description for http://www.vxbq.cn/access/ibility */ R.string.drawer_close /* "close drawer" description for http://www.vxbq.cn/access/ibility */ ) { public void onDrawerClosed(View view) { // creates call to onPrepareOptionsMenu() invalidateOptionsMenu(); } public void onDrawerOpened(View drawerView) { // creates call to onPrepareOptionsMenu() invalidateOptionsMenu(); } }; // 綁定監聽器 mDrawerLayout.setDrawerListener(mDrawerToggle);

    值得注意的是,在onDrawerClosed()和onDrawerOpened()方法里面,并沒有直接的進行DrawerLayout的打開和關閉操作,而是調用了invalidateOptionsMenu()方法,讓系統去調用onPrepareoptionsMenu()。那末,側滑欄的打開和關閉,到底如何控制呢?

    我們可以在onOptionsItemelected方法里面進行控制,象下面這樣

@Override public boolean onOptionsItemSelected(MenuItem item) { // 處理側滑欄的打開關閉效果 if (mDrawerToggle.onOptionsItemSelected(item)) { return true; } // 處理ActionBar的Menu的點擊事件 switch (item.getItemId()) { // edit case R.id.action_edit: Toast.makeText(this, "Edit", Toast.LENGTH_SHORT).show(); return true; // more case R.id.action_more: Toast.makeText(this, "More", Toast.LENGTH_SHORT).show(); return true; } return super.onOptionsItemSelected(item); }

    設置好側滑欄以后,下面開始設置Tab。滑動的Tab界面,實際上是由ViewPager和ActionBar.Tab組成的,因此,我們需要分別進行設置。

    ViewPager的使用大家應當很熟習了,需要設置1個Adapter,然后在里面進行Fragment頁面的切換操作,下面重點說1下,如何將Tab和ViwqPager組合起來。

    首先,我們需要調用下面的代碼,將導航模式調劑為tab

// 初始化

actionBar = getActionBar();

// 設置導航模式為Tab方式

actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    設置好以后,我們就能夠組合了

// 初始化ViewPager的適配器對象 mSectionsPagerAdapter = new SectionsPagerAdapter( getSupportFragmentManager()); mViewPager.setAdapter(mSectionsPagerAdapter); // 在不同的Fragment之間滑動的時候,修改選中的tab,我們也能夠使用ActionBar.Tab#select()完成,如果我們有Tab的援用的話 mViewPager .setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { actionBar.setSelectedNavigationItem(position); } }); // 根據界面數量添加Tab for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) { actionBar.addTab(actionBar.newTab() .setText(mSectionsPagerAdapter.getPageTitle(i)) .setTabListener(this)); }

    如果想滑動以后改變Tab確當前選中項,我們需要在onPageSelected里面根據position設置選中的項目便可,如果我們想點擊tab,ViewPager切換到對應的界面,我們需要在當前的Activity中,實現ActionBar.TabListener 接口,然后在下面的回調接口中,切換便可

@Override public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { // 處理Tab的點擊,ViewPager滑動到對應的位置 mViewPager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { } @Override public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { }

    經過上面這些步驟,我們就用純原生的控件實現了想要的效果。關于ActionBar上的Menu和SharetionProvider的使用,這篇文章不做過量介紹了,有時間單獨介紹。

    項目的Github地址:https://github.com/ZhaoKaiQiang/actionbartabs

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲国产精品嫩草影院久久 | freesexvideos性大全性亚洲 | jizz中国zz女人18 | 羞羞首页登录界面入口免费 | 羞羞的动漫网站 | 午夜手机视频 | 国产亚洲精品中文带字幕21页 | 亚洲最大成人 | 久久aa | 久草在线观看首页 | 国产成人久久精品麻豆二区 | 国产综合视频在线观看 | 久久精品国产精品亚洲综合 | 精品久久久久久免费影院 | 欧美视频自拍偷拍 | 另类图片综合网 | 国产国产成人精品久久 | 日韩在线一区二区三区视频 | 无遮挡在线视频 | 在线不卡免费视频 | 欧美在线一级va免费观看 | 国产农村妇女毛片精品久久 | 精品欧美一区二区三区 | 中文字幕一区二区三区乱码aⅴ | 欧美综合国产精品日韩一 | 亚洲国产欧美在线人成 | 欧美性猛交乱大交xxxx | 久久国内免费视频 | 亚洲视频在线一区 | 女性一级全黄生活片免费看 | 网站大全黄免费 | 最近中文字幕完整在线看一 | xxxx日| 国产一级淫片a免费播放口 国产一级淫片a免费播放口欧美 | 成人亚洲国产精品久久 | 国产欧美日韩在线观看一区二区三区 | 国产午夜精品一区二区三区 | 中文字幕在线观看一区 | 一级毛片在线免费视频 | 久久精品二三区 | 麻豆成人在线 |