android 侧滑菜单 DrawerLayout
还是别写什么前奏了,直接上干货吧:
首先是布局控件的官方说法
To use a DrawerLayout, position your primary content view as the first child with
* width and height of match_parent
and no layout_gravity>
.
* Add drawers as child views after the main content view and set the layout_gravity
* appropriately. Drawers commonly use match_parent
for height with a fixed width.
先来生硬的翻译一下这段东西:
为了使用DrawerLayout控件,首先你需要将一个主视图布局当作第一个子布局放入DrawerLayout布局内部,然后再次加入作为drawers(也就是侧滑菜单)的布局放置在主视图布局的下方,这个布局需要定义高度为match,加入layout_gravity(目的是设置左划还是右滑),而且切记drawers布局需要写入一个固定的宽度。
啰嗦完毕,接下来上干货,开始撸码:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_drawerlayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--主视图 -->
<LinearLayout
android:id="@+id/main_base_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<TextView
android:textSize="@dimen/textsize80"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="咳咳,你可以把这个当作QQ的界面"/>
</LinearLayout>
<!--菜单视图-->
<LinearLayout
android:layout_width="@dimen/menu_width"
android:layout_height="match_parent"
android:id="@+id/main_base_menu"
android:orientation="vertical"
android:layout_gravity="left"></LinearLayout>
</android.support.v4.widget.DrawerLayout>
然后你就会看到这个样子的东西
界面上的东西基本大功告成:下面我们来看看一些点击事件的处理
public class MainActivity extends Activity {
@InjectView(R.id.main_base_layout)
LinearLayout mainBaseLayout;//主视图界面控件
@InjectView(R.id.main_base_menu)
LinearLayout mainBaseMenu;//侧滑菜单布局
@InjectView(R.id.main_drawerlayout)
DrawerLayout mainDrawerlayout;//侧滑菜单控件
private MenuListAdapter menuAdapter;
private List<String> stringList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.inject(this);
initMenu();
setView();
}
private void setView() {
mainDrawerlayout.addDrawerListener(new DrawerLayout.DrawerListener() {
//滑动状态监听
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
Log.d("MainActivity", "slideOffset:" + slideOffset);
}
//打开监听
@Override
public void onDrawerOpened(View drawerView) {
}
//关闭监听
@Override
public void onDrawerClosed(View drawerView) {
}
//状态改变监听
@Override
public void onDrawerStateChanged(int newState) {
}
});
}
/**
* 设置菜单
*/
private void initMenu() {
View v = View.inflate(this, R.layout.menu_layout, null);
v.setLayoutParams(new DrawerLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
mainBaseMenu.addView(v);
ListView menuList = (ListView) v.findViewById(R.id.menu_layout_listview);
menuAdapter = new MenuListAdapter(stringList, this);
menuList.setAdapter(menuAdapter);
menuList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//关闭菜单布局,更具内部传参left或者right去判断关闭哪个
mainDrawerlayout.closeDrawer(Gravity.LEFT);
}
});
initMenuData();
}
/**
* 增加数据
*/
private void initMenuData() {
stringList.add("测试1");
stringList.add("测试2");
stringList.add("测试3");
stringList.add("测试4");
menuAdapter.notifyDataSetChanged();
}
}
到此为止,DrawerLayout的基本介绍就结束了上面重要节点都有注释,很容易理解,代码就不上传了,如果觉得有用记得好评哦亲。。。