Andorid DrawerLayout控件的使用方法

来源:互联网 发布:js校验身份证号 编辑:程序博客网 时间:2024/04/30 08:50

一、概述:

1、效果图:
这里写图片描述
2、使用DrawerLayout可以轻松实现slidingmenu的功能,并且简单易用

二、具体实现:

1、创建布局文件,以DrawerLayout作为包裹layout,里面添加viewpager和一个FrameLayout
其中viewpager用来实现右侧的内容,而fragment用来添加左侧的菜单

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/drawerlayout_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".MainActivity" >    <android.support.v4.view.ViewPager        android:id="@+id/vp_main"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:layout_centerHorizontal="true"        android:layout_centerVertical="true" >        <android.support.v4.view.PagerTabStrip            android:id="@+id/pager_tab_strip"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_gravity="top"            android:background="#d17026"            android:textColor="#fff" />    </android.support.v4.view.ViewPager>    <FrameLayout        android:id="@+id/fl_menu"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="start"        android:text="应用详情" >    </FrameLayout></android.support.v4.widget.DrawerLayout>

2、创建BaseActivity,继承ActionBarActivity

/** * @描述 基础activity * @项目名称 App_Shop * @包名 com.android.shop * @类名 BaseActivity * @author chenlin * @date 2013-3-25 下午10:47:47 * @version 1.0 */public abstract class BaseActivity extends ActionBarActivity {    //public final static  String KILLACTION= "com.android.killreceiver";    public static BaseActivity activity;    private List<BaseActivity> mActivities = new LinkedList<BaseActivity>();    private KillReceiver mReceiver;    private class KillReceiver extends BroadcastReceiver{        @Override        public void onReceive(Context context, Intent intent) {            finish();        }    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //mReceiver = new KillReceiver();        //registerReceiver(mReceiver, new IntentFilter(KILLACTION));        synchronized (mActivities) {            mActivities.add(this);        }        init();        initViews();        initActionBar();        initEvents();    }    //---onPause --onResume  用来判断activity是否存在--------在util.startActivity里使用--------------------------------    @Override    protected void onPause() {        activity = null;        super.onPause();    }    @Override    protected void onResume() {        activity = this;        super.onResume();    }    /**     * 关闭所有的activity     */    public void finishAll() {        List<BaseActivity> copyActivities = null;        synchronized (mActivities) {            copyActivities = new LinkedList<BaseActivity>(mActivities);        }        if (copyActivities != null && copyActivities.size() > 0) {            for (BaseActivity activity : copyActivities) {                activity.finish();            }            android.os.Process.killProcess(android.os.Process.myPid());        }    }    public abstract void init();    public abstract void initViews();    protected void initEvents() {    }    protected void initActionBar() {    }    public void toast(String text){        Toast.makeText(getApplicationContext(), text, Toast.LENGTH_LONG).show();    }    public void alert(final String text){        runOnUiThread(new Runnable() {            @Override            public void run() {                Toast.makeText(getApplicationContext(), text, Toast.LENGTH_LONG).show();            }        });    }    @Override    protected void onDestroy() {        synchronized (mActivities) {            mActivities.remove(this);        }        if (mReceiver != null) {            unregisterReceiver(mReceiver);            mReceiver = null;        }        super.onDestroy();    }}

3、创建MainActivity继承BaseActivity
这里得定义ActionBarDrawerToggle , DrawerLayout的侧拉事件都是由其实现的

package com.android.shop;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.support.v4.app.ActionBarDrawerToggle;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentStatePagerAdapter;import android.support.v4.view.PagerTabStrip;import android.support.v4.view.ViewPager;import android.support.v4.widget.DrawerLayout;import android.support.v7.app.ActionBar;import android.support.v7.widget.SearchView;import android.support.v7.widget.SearchView.OnQueryTextListener;import android.view.KeyEvent;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.view.View;import android.widget.FrameLayout;import android.widget.Toast;import com.android.shop.adapter.holder.MenuHolder;import com.android.shop.helper.FragmentFactory;import com.android.shop.utils.Util;public class MainActivity extends BaseActivity implements OnQueryTextListener {    private DrawerLayout mDrawerLayout;    private ActionBarDrawerToggle mDrawerToggle;    private ViewPager mViewPager;    private PagerTabStrip mTabStrip;    private String[] mTabNames;    private Fragment mCurrentFragment;    private FrameLayout mMenuFragment;    @Override    public void init() {        //sendBroadcast(new Intent(KILLACTION)); 关闭activity        setContentView(R.layout.activity_main);        mTabNames = Util.getStringArray(R.array.tab_names);    }    @Override    public void initViews() {        mViewPager = (ViewPager) findViewById(R.id.vp_main);        mViewPager.setAdapter(new TabPagerAdapter(getSupportFragmentManager()));        mTabStrip = (PagerTabStrip) findViewById(R.id.pager_tab_strip);        mTabStrip.setTabIndicatorColor(getResources().getColor(R.color.tabIndicator_color));        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerlayout_main);        //加载左侧的菜单信息        mMenuFragment = (FrameLayout) findViewById(R.id.fl_menu);        MenuHolder holder  = new MenuHolder();        mMenuFragment.addView(holder.getConvertView());    }    @Override    protected void initEvents() {        mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){            @Override            public void onPageSelected(int position) {                //getSupportActionBar().setSelectedNavigationItem(position);                //在页面切换时显示不同的加载页面                FragmentFactory.createFragment(position).show();                super.onPageSelected(position);            }        });    }    @Override    protected void initActionBar() {        //getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);        //添加菜单        ActionBar actionBar = getSupportActionBar();        actionBar.setDisplayHomeAsUpEnabled(true);        actionBar.setHomeButtonEnabled(true);        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer, R.string.open_drawer, R.string.close_drawer){            @Override            public void onDrawerClosed(View drawerView) {                super.onDrawerClosed(drawerView);            }            @Override            public void onDrawerOpened(View drawerView) {            }        };        mDrawerLayout.setDrawerListener(mDrawerToggle);        mDrawerToggle.syncState();    }    public void toDetail(View view) {        Intent intent = new Intent(this, DetailActivity.class);        startActivity(intent);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        MenuInflater inflater = getMenuInflater();        inflater.inflate(R.menu.activity_main, menu);        //if (android.os.Build.VERSION.SDK_INT >= 11) {            SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();            //设置查询监听            searchView.setOnQueryTextListener(this);        //}        return super.onCreateOptionsMenu(menu);    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        if (item.getItemId() == R.id.action_search) {            Toast.makeText(this, "搜索", Toast.LENGTH_LONG).show();        }        return super.onOptionsItemSelected(item) | mDrawerToggle.onOptionsItemSelected(item);    }    @Override    public boolean onQueryTextSubmit(String query) {        // TODO Auto-generated method stub        return true;// true表示执行此方法    }    @Override    public boolean onQueryTextChange(String newText) {        // TODO Auto-generated method stub        return true;    }    private class TabPagerAdapter extends FragmentStatePagerAdapter{        public TabPagerAdapter(FragmentManager fm) {            super(fm);        }        @Override        public Fragment getItem(int position) {            mCurrentFragment = FragmentFactory.createFragment(position);            return mCurrentFragment;        }        @Override        public int getCount() {            return mTabNames.length;        }        @Override        public CharSequence getPageTitle(int position) {            return mTabNames[position];        }    }    @Override     public boolean dispatchKeyEvent(KeyEvent event) {       if (event.getAction()==KeyEvent.ACTION_DOWN&&event.getKeyCode()==KeyEvent.KEYCODE_BACK) {        new AlertDialog.Builder(this)               .setCancelable(false)               .setTitle("温馨提示")               .setMessage("您确定要退出吗?")               .setPositiveButton("确定",new DialogInterface.OnClickListener() {                   public void onClick(DialogInterface dialog, int which) {                       finishAll();                   }               })               .setNegativeButton("取消", new DialogInterface.OnClickListener() {                   public void onClick(DialogInterface dialog, int which) {                    }               }).show();        return true;      }      return super.dispatchKeyEvent(event);     }}
0 0
原创粉丝点击