您的位置:首页 > 移动开发 > Android开发

android 侧滑菜单

2016-06-05 18:43 351 查看
上一篇文章介绍了 谷歌官方的侧滑,本次对他进行一些扩展





代码如下:

package cn.edu.zafu.toolbardemo;

import android.os.Bundle;
import android.support.v4.app.FragmentTabHost;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.FrameLayout;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TabHost;
import android.widget.Toast;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends ActionBarActivity {
protected Toolbar toolbar;
protected DrawerLayout mDrawerLayout;
private ListView mDrawerList;

private List<String> titles = new ArrayList<>();

//---
private FrameLayout flContainer;
private FragmentTabHost tabHost;
private RadioButton tab1;
private RadioButton tab2;
private RadioButton tab3;
private RadioButton tab4;
private RadioGroup rgTab;
private Class fragment[];
private int[] icons;
private Menu mMenu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fragment = new Class[]{FlashFragment.class, SearchFragment.class, TransferFragment.class,CustomFragment.class};
initialize();

setSupportActionBar(toolbar);//把toolbar 设置进去,这样toolbar就能调用actionbar的方法
String [] mPlanetTitles = getResources().getStringArray(R.array.planets_array);
for (int i=0;i<mPlanetTitles.length;i++){
titles.add(mPlanetTitles[i]);
}

mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerlayout);

mDrawerList = (ListView) findViewById(R.id.left_drawer);
mDrawerList.setAdapter(new DrawerAdapter(this,titles,icons));
mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

//开关
ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.open, R.string.close) {
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
}

@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
}
};
mDrawerToggle.syncState();
mDrawerLayout.setDrawerListener(mDrawerToggle);//设置监听器

}

private boolean flag;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
mMenu = menu;
getMenuInflater().inflate(R.menu.menu_main, menu);
return flag;
}

//显示menu
private void showMenu(){
if(null!=mMenu){
for (int i=0;i<mMenu.size();i++){
mMenu.getItem(i).setVisible(true);
mMenu.getItem(i).setEnabled(true);
}
flag = true;
}
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_zone) {
Toast.makeText(getApplicationContext(),"跳转到--登录页",Toast.LENGTH_SHORT).show();
}else if(id==R.id.action_search){
Toast.makeText(getApplicationContext(),"跳转到--搜索页",Toast.LENGTH_SHORT).show();
}
return super.onOptionsItemSelected(item);
}

/**
**显示溢出菜单图标
**/
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
if (featureId == Window.FEATURE_ACTION_BAR && menu != null) {
if (menu.getClass().getSimpleName().equals("MenuBuilder")) {
try {
Method m = menu.getClass().getDeclaredMethod(
"setOptionalIconsVisible", Boolean.TYPE);
m.setAccessible(true);
m.invoke(menu, true);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
return super.onMenuOpened(featureId, menu);
}

private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(getApplicationContext(),"跳转到--"+titles.get(position),Toast.LENGTH_SHORT).show();
mDrawerLayout.closeDrawer(mDrawerList);
}
}

private void initialize() {
icons = new int[]{R.mipmap.menu_alarm_geton,R.mipmap.menu_alarm_getoff,
R.mipmap.menu_update,R.mipmap.menu_feedback,R.mipmap.menu_share,R.mipmap.menu_help,
R.mipmap.menu_clause,R.mipmap.menu_about,R.mipmap.menu_about};
toolbar = (Toolbar) findViewById(R.id.toolbar);

flContainer = (FrameLayout) findViewById(R.id.flContainer);
tabHost = (FragmentTabHost) findViewById(R.id.tabHost);
tab1 = (RadioButton) findViewById(R.id.tab_1);
tab2 = (RadioButton) findViewById(R.id.tab_2);
tab3 = (RadioButton) findViewById(R.id.tab_3);
tab4 = (RadioButton) findViewById(R.id.tab_4);
rgTab = (RadioGroup) findViewById(R.id.rgTab);
toolbar.setTitle(tab1.getText().toString());//默认标题
tabHost.setup(getApplicationContext(), getSupportFragmentManager(), R.id.flContainer);
for (int i = 0; i < fragment.length; i++) {
TabHost.TabSpec tabSpec = tabHost.newTabSpec(String.valueOf(i)).setIndicator(String.valueOf(i));
tabHost.addTab(tabSpec, fragment[i], null);
}
tabHost.setCurrentTab(0);
rgTab.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId) {
case R.id.tab_1:
tabHost.setCurrentTab(0);
toolbar.setTitle(tab1.getText().toString());
flag = false;
break;
case R.id.tab_2:
tabHost.setCurrentTab(1);
toolbar.setTitle(tab2.getText().toString());
flag = false;
break;
case R.id.tab_3:
tabHost.setCurrentTab(2);
toolbar.setTitle(tab3.getText().toString());
flag = false;
break;
case R.id.tab_4:
tabHost.setCurrentTab(2);
toolbar.setTitle(tab4.getText().toString());
showMenu();
break;
}
supportInvalidateOptionsMenu();
}
});
}
}


main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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">

<include
android:id="@+id/toolbar"
layout="@layout/toolbar" />

<android.support.v4.widget.DrawerLayout
android:layout_below="@id/toolbar"
android:id="@+id/drawerlayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--主布局-->
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/flContainer"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<android.support.v4.app.FragmentTabHost
android:visibility="gone"
android:id="@+id/tabHost"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<RadioGroup
android:background="@drawable/bg_lineframe_top"
android:orientation="horizontal"
android:id="@+id/rgTab"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RadioButton
android:id="@+id/tab_1"
android:textSize="@dimen/txt_size_5"
android:textColor="@drawable/bg_home_text_selector"
android:checked="true"
android:drawablePadding="@dimen/space_size_4"
android:gravity="center"
android:drawableTop="@drawable/bg_tabbar_one_selector"
android:text="@string/home_tab_1"
android:button="@null"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<RadioButton
android:textSize="@dimen/txt_size_5"
android:id="@+id/tab_2"
android:textColor="@drawable/bg_home_text_selector"
android:drawablePadding="@dimen/space_size_4"
android:gravity="center"
android:drawableTop="@drawable/bg_tabbar_two_selector"
android:text="@string/home_tab_2"
android:layout_weight="1"
android:button="@null"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<RadioButton
android:id="@+id/tab_3"
android:textSize="@dimen/txt_size_5"
android:textColor="@drawable/bg_home_text_selector"
android:drawablePadding="@dimen/space_size_4"
android:drawableTop="@drawable/bg_tabbar_three_selector"
android:gravity="center"
android:text="@string/home_tab_3"
android:layout_weight="1"
android:button="@null"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

<RadioButton
android:id="@+id/tab_4"
android:textSize="@dimen/txt_size_5"
android:textColor="@drawable/bg_home_text_selector"
android:drawablePadding="@dimen/space_size_4"
android:drawableTop="@drawable/bg_tabbar_four_selector"
android:gravity="center"
android:text="@string/home_tab_4"
android:layout_weight="1"
android:button="@null"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</RadioGroup>
</LinearLayout>
<!--侧滑菜单-->
<ListView
android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="#ffffff"/>
</android.support.v4.widget.DrawerLayout>
</RelativeLayout>


左侧item.xml 很简单 就是一个图片+文字, toolbar.xml如下

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
android:background="@color/common"
android:minHeight="?attr/actionBarSize"
/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: