本節引言:
本節給大家帶來基礎UI控件部分的最后一個控件:DrawerLayout,官方給我們提供的一個側滑菜單 控件,和上一節的ViewPager一樣,3.0以后引入,低版本使用它,需要v4兼容包,說到側滑,相信 很多人都用過github上的SlidingMenu
不過說起來SlidingMenu和官方的Drawerlayout的區別,小編這里只能說各有千秋吧,如果論穩定性,當然是官方的控件了,如果說效果方面,當然是開源庫的SlidingMenu當仁不讓了
1.使用的注意事項
1.主內容視圖一定要是DrawerLayout的第一個子視圖
2.主內容視圖寬度和高度需要match_parent
3.必須顯示指定側滑視圖的android:layout_gravity屬性
android:layout_gravity = "start"
時,從左向右滑出菜單android:layout_gravity = "end"
時,從右向左滑出菜單 不推薦使用left和right!!!4.側滑視圖的寬度以dp為單位,不建議超過320dp(為了總能看到一些主內容視圖)
5.設置側滑事件:mDrawerLayout.setDrawerListener(DrawerLayout.DrawerListener);
6.要說一點:可以結合Actionbar使用當用戶點擊Actionbar上的應用圖標,彈出側滑菜單! 這里就要通過ActionBarDrawerToggle,它是DrawerLayout.DrawerListener的具體實現類, 我們可以重寫ActionBarDrawerToggle的onDrawerOpened()和onDrawerClosed()以監聽抽屜拉出 或隱藏事件!但是這里我們不講,因為5.0后我們使用的是Toolbar!有興趣的可以自行查閱相關 文檔!
2.使用代碼示例
示例1:單個側滑菜單的實現
運行效果圖:

實現關鍵代碼:
首先是我們的主布局,注意:最外層要是DrawerLayout哦!!!!,DrawerLayout里面的布局可以自定義,但是一定要有個布局是android:layout_gravity="start"
activity_main.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"> <FrameLayout android:id="@+id/ly_content" android:layout_width="match_parent" android:layout_height="match_parent" /> <ListView android:id="@+id/list_left_drawer" android:layout_width="180dp" android:layout_height="match_parent" android:layout_gravity="start" android:background="#080808" android:choiceMode="singleChoice" android:divider="#FFFFFF" android:dividerHeight="1dp" /> </android.support.v4.widget.DrawerLayout>
接着ListView的布局代碼和domain類:Item比較簡單,就不給出了,直接上中間Fragment的 布局以及代碼吧!另外Adapter直接復用我們之前寫的那個可復用的MyAdapter!
fg_content.xml:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/tv_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:textSize="25sp" /> </RelativeLayout>
ContentFragment.java:
/** * Created by Jay on 2015/10/8 0008. */ public class ContentFragment extends Fragment { private TextView tv_content; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fg_content, container, false); tv_content = (TextView) view.findViewById(R.id.tv_content); String text = getArguments().getString("text"); tv_content.setText(text); return view; } }
最后是我們的Activity類
MainActivity.java:
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener{ private DrawerLayout drawer_layout; private ListView list_left_drawer; private ArrayList<Item> menuLists; private MyAdapter<Item> myAdapter = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); drawer_layout = (DrawerLayout) findViewById(R.id.drawer_layout); list_left_drawer = (ListView) findViewById(R.id.list_left_drawer); menuLists = new ArrayList<Item>(); menuLists.add(new Item(R.mipmap.iv_menu_realtime,"實時信息")); menuLists.add(new Item(R.mipmap.iv_menu_alert,"提醒通知")); menuLists.add(new Item(R.mipmap.iv_menu_trace,"活動路線")); menuLists.add(new Item(R.mipmap.iv_menu_settings,"相關設置")); myAdapter = new MyAdapter<Item>(menuLists,R.layout.item_list) { @Override public void bindView(ViewHolder holder, Item obj) { holder.setImageResource(R.id.img_icon,obj.getIconId()); holder.setText(R.id.txt_content, obj.getIconName()); } }; list_left_drawer.setAdapter(myAdapter); list_left_drawer.setOnItemClickListener(this); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { ContentFragment contentFragment = new ContentFragment(); Bundle args = new Bundle(); args.putString("text", menuLists.