android 侧滑菜单

上一篇文章介绍了 谷歌官方的侧滑,本次对他进行一些扩展

代码如下:

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"
    />
原文地址:https://www.cnblogs.com/android-zcq/p/5561385.html