SlidingMenu
下载 SlidingMenu
https://github.com/jfeinstein10/SlidingMenu
android studio 中导入库文件
将Slidingmenu文件中的library文件夹拷入到AS中,在Project下和app同一目录
或者可以File--New--Import Moudle
可以给library重新命名,这里是SlidingMenuLibrary;
接着,在app的settings.gradle中,添加 include ':SlidingMenuLibrary' ;
其次,将库文件和app中的build.gradle中的compileSdkVersion ,buildToolsVersion ,minSdkVersion ,targetSdkVersion 都修改一致
接着,将dependencies下的build.gradle中的 classpath 修改一致
之后,SlidingMenu文件中的 CustomViewAbove 会报错,是因为 distanceInfluenceForSnapDuration中的方法(float) FloatMath.sin(f)过时,将FloatMath改为Math就可以了;
改为
Build/Make Project ,SlidingMenu添加成功
Activity中new SlidingMenu使用
继承SlidingActivity,通过getSlidingMenu()获取slidingmenu对象,setBehindContentView()设置布局
DrawerLayout
drawerLayout是带有滑动的功能的控件,包括侧边菜单和主内容两部分
DrawerLayout的基本使用
1.设置布局xml
最外层是控件 android.support.v4.widget.DrawerLayout,其中的id为iv_content 的 ImageView是主界面的内容,id是tv_left_drawerlayout的TextView是侧滑菜单的内容
2. Activity中设置drawerlayout
Activity中通过android.support.v7.app.ActionBarDrawerToggle中的ActionBarDrawerToggle设置drawerlayout 打开或者关闭的操作 onDrawerOpened 和 onDrawerClosed ;
最后,将ActionBarDrawerToggle添加给drawerlayout
如下:
actionBarDrawerToggle.syncState();
drawerlayout.addDrawerListener(actionBarDrawerToggle);
drawerlayout和Toolbar一起使用
布局文件
Activity中
public class MainActivity extends ActionBarActivity {
//声明相关变量
private Toolbar toolbar;
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mDrawerToggle;
private ListView lvLeftMenu;
private String[] lvs = {"List Item 01", "List Item 02", "List Item 03", "List Item 04"};
private ArrayAdapter arrayAdapter;
private ImageView iv_main;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
iv_main = (ImageView) findViewById(R.id.iv_main);
toolbar = (Toolbar) findViewById(R.id.tl_custom);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerlayout);
lvLeftMenu = (ListView) findViewById(R.id.lv_left_menu);
//设置Toolbar标题
toolbar.setTitle("Toolbar");
//设置标题颜色
toolbar.setTitleTextColor(Color.parseColor("#f0f0f0"));
setSupportActionBar(toolbar);
//设置返回键可用
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//创建返回键,并实现打开关/闭监听
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.app_name, R.string.app_name) {
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
Toast.makeText(getApplicationContext(), "onDrawerOpened", Toast.LENGTH_SHORT).show();
iv_main.setVisibility(View.INVISIBLE);
}
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
Toast.makeText(getApplicationContext(), "onDrawerClosed", Toast.LENGTH_SHORT).show();
iv_main.setVisibility(View.VISIBLE);
}
};
mDrawerToggle.syncState();
mDrawerLayout.setDrawerListener(mDrawerToggle);
//设置菜单列表
arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, lvs);
lvLeftMenu.setAdapter(arrayAdapter);
lvLeftMenu.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(MainActivity.this, DrawerLayoutActivity.class);
startActivity(intent);
}
});
}
}
DrawerLayout 和 NavigationView 一起使用
在build.gradle中加入 compile 'com.android.support:design:23.1.1'来添加NavigationView
布局文件中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="drawerlayout.com.drawerlayout.NavigationViewActivity">
<android.support.v7.widget.Toolbar
android:id="@+id/nv_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
<android.support.v4.widget.DrawerLayout
android:id="@+id/nv_drawerlayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--主布局-->
<ImageView
android:id="@+id/nv_iv_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!--侧滑菜单-->
<android.support.design.widget.NavigationView
android:id="@+id/navigationView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#ffffff"
app:itemIconTint="@null"
app:itemTextColor="#666666"
app:menu="@menu/activity_nv_drawer" />
</android.support.v4.widget.DrawerLayout>
</LinearLayout>
其中的menu
在
其中的内容
在Activity中
public class NavigationViewActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
private Toolbar nv_toolbar;
private DrawerLayout nv_drawerlayout;
private ImageView nv_iv_main;
private NavigationView navigationView;
private View headerLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_navigation_view);
init();
}
private void init() {
nv_toolbar = (Toolbar) findViewById(R.id.nv_toolbar);
nv_drawerlayout = (DrawerLayout) findViewById(R.id.nv_drawerlayout);
nv_iv_main = (ImageView) findViewById(R.id.nv_iv_main);
navigationView = (NavigationView) findViewById(R.id.navigationView);
//给添加头标题
headerLayout = navigationView.inflateHeaderView(R.layout.nav_header_main);
nv_toolbar.setTitle("NavigationViewActivity的Toolbar");
nv_toolbar.setTitleTextColor(Color.parseColor("#f0f0f0"));
nv_toolbar.setNavigationIcon(R.mipmap.un_confirm);
nv_toolbar.setSubtitle("nv副标题");
navigationView.setNavigationItemSelectedListener(this);
navigationView.setItemIconTintList(null);//设置菜单图标恢复本来的颜色,不然图标是灰色
setSupportActionBar(nv_toolbar);
//设置返回键可用--在setSupportActionBar()之后,不然报空指针
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, nv_drawerlayout, nv_toolbar, R.string.app_name, R.string.app_name){
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
Toast.makeText(getApplicationContext(), "onDrawerOpened", Toast.LENGTH_SHORT).show();
nv_iv_main.setBackground(getResources().getDrawable(R.mipmap.notice));
}
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
Toast.makeText(getApplicationContext(), "onDrawerClosed", Toast.LENGTH_SHORT).show();
nv_iv_main.setBackground(getResources().getDrawable(R.mipmap.home));
}
};
toggle.syncState();
nv_drawerlayout.setDrawerListener(toggle);
}
@Override
public boolean onNavigationItemSelected(MenuItem item) {
String msg = "";
switch (item.getItemId()) {
case R.id.home_checked:
msg = "home_checked";
break;
case R.id.order_checked:
msg = "order_checked";
break;
case R.id.discovery_checked:
msg = "discovery_checked";
break;
case R.id.user_checked:
msg = "user_checked";
break;
case R.id.confirm:
msg = "confirm";
break;
}
Toast.makeText(getApplicationContext(), "msg--" + msg, Toast.LENGTH_SHORT).show();
return true;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_nv_drawer, menu);
return true;
}
}
添加头标题
headerLayout = navigationView.inflateHeaderView(R.layout.nav_header_main);