在做谷歌電子市場的時候用的是DrawerLayout實現的抽屜效果,在新聞客戶端的時候用的是開源框架SlidingMenu來實現的,總的來說,各有個的優點,側滑(開源框架)實現的效果更好,但是DrawerLayout直接寫布局文件就好了,不過我還是比較喜歡用開源框架的這個
。下面分別來說說如何實現:
**一、SlidingMenu**
?首先要引入SlidingMenu的庫文件的類庫,不能直接導入jar包。然后 Activity繼承SlidingFragmentActivity。其次,將onCreate方法改為public。
在主界面中添加如下代碼:
~~~
//調用api
setBehindContentView(R.layout.left_menu);// 設置側邊欄布局
SlidingMenu slidingMenu = getSlidingMenu();// 獲取側邊欄對象
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);// 設置全屏觸摸
slidingMenu.setSecondaryMenu(R.layout.right_menu);// 設置右側邊欄
slidingMenu.setMode(SlidingMenu.LEFT_RIGHT);// 設置展現模式
slidingMenu.setBehindOffset(100);// 設置預留屏幕的寬度
~~~
在BasePager.java中添加如下代碼。
~~~
/**
* 切換SlidingMenu的狀態
*
* @param b
*/
protected void toggleSlidingMenu() {
MainActivity mainUi = (MainActivity) mActivity;
SlidingMenu slidingMenu = mainUi.getSlidingMenu();
slidingMenu.toggle();// 切換狀態, 顯示時隱藏, 隱藏時顯示
}
/**
* 初始化數據
*/
public void initData() {
}
/**
* 設置側邊欄開啟或關閉
*
* @param enable
*/
public void setSlidingMenuEnable(boolean enable) {
MainActivity mainUi = (MainActivity) mActivity;
SlidingMenu slidingMenu = mainUi.getSlidingMenu();
if (enable) {
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
} else {
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE);
}
}
~~~
每個子界面都可以用到如下的代碼:
~~~
public class SettingPager extends BasePager {
public SettingPager(Activity activity) {
super(activity);
}
@Override
public void initData() {
//System.out.println("初始化設置數據....");
tvTitle.setText("設置");
btnMenu.setVisibility(View.GONE);// 隱藏菜單按鈕
setSlidingMenuEnable(false);// 關閉側邊欄
TextView text = new TextView(mActivity);
text.setText("設置");
text.setTextColor(Color.RED);
text.setTextSize(25);
text.setGravity(Gravity.CENTER);
// 向FrameLayout中動態添加布局
flContent.addView(text);
}
}
~~~

**二、DrawerLayout**
直接在布局文件中這樣寫:
~~~
<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"
tools:context=".MainActivity"
android:id="@+id/dl">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
/>
<FrameLayout android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_tab"
android:layout_gravity="left">
</FrameLayout>
</android.support.v4.widget.DrawerLayout>
~~~
然后再主頁面中添加:
控制抽屜的開關, 顯示在actionBar 上面?
~~~
public class MainActivity extends BaseActivity implements
OnQueryTextListener {
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle drawerToggle;
private ViewPager mViewPager;
private PagerTabStrip pager_tab_strip;
private String[] tab_names; // 標簽的名字
@Override
protected void initActionBar() {
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
/*
* 1)顯示Navigation Drawer的 Activity 對象
2) DrawerLayout 對象
3)一個用來指示Navigation Drawer的 drawable資源
4)一個用來描述打開Navigation Drawer的文本 (用于支持可訪問性)。
5)一個用來描述關閉Navigation Drawer的文本(用于支持可訪問性).
*/
drawerToggle = new ActionBarDrawerToggle(this,
mDrawerLayout, R.drawable.ic_drawer_am, R.string.open_drawer,
R.string.close_drawer){
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
Toast.makeText(getApplicationContext(), "抽屜關閉了", 0).show();
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
Toast.makeText(getApplicationContext(), "抽屜打開了", 0).show();
}
};
mDrawerLayout.setDrawerListener(drawerToggle);
// 讓開關和actionbar建立關系
drawerToggle.syncState();
}
}
~~~

- 前言
- 內存溢出的解決方案
- 安卓消息推送解決方案
- 語言識別和聊天機器人的實現
- 抽屜效果的實現(DrawerLayout和SlidingMenu的對比)
- 植物大戰僵尸經典開發步驟
- 屏幕適配全攻略
- 安卓圖像處理入門教程
- android開發常用工具箱
- java基礎知識總結
- 剖析軟件外包項目
- java基礎知識——網絡編程、IO流
- 安卓性能優化手冊
- 電商活動中刮刮卡的實現
- Android系統的安全設計與架構
- AsnycTask的內部的實現機制
- Android應用UI設計流程
- 數據結構與算法,每日一道
- html5全解析
- 深入解讀XML解析
- 新聞客戶端案例開發
- 細說Http協議
- win10+ubuntu雙系統安裝方案
- 隨機驗證碼實現案例
- 動態數組的實現案例
- 猜拳游戲案例
- 商業級項目——基金客戶端的架構設計與開發(上)