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
- Andorid DrawerLayout控件的使用方法
- DrawerLayout控件的使用
- Android DrawerLayout和NavigationView 的使用方法
- Android DrawerLayout和NavigationView 的使用方法
- Andorid之BINDSERVICE的使用方法总结
- Andorid控件
- Android中DrawerLayout控件的使用
- Android控件之Toolbar + DrawerLayout的使用
- Android 控件DrawerLayout的基本使用
- Android官方的侧滑控件DrawerLayout
- Andorid制作内含控件的自定义布局
- DrawerLayout使用方法学习笔记
- 从google的DrawerLayout来看看scroller的使用方法
- Andorid时间控件和日期控件的Demo(代码)
- Andorid时间控件和日期控件的Demo(代码)
- Andorid时间控件和日期控件的Demo(代码)
- DrawerLayout抽屉控件
- android控件11---DrawerLayout
- 逻辑推理训练
- cocos 自定义事件
- Oracle-数据的导入与导出
- 数据结构再学习--队列
- 计算机组成原理 运算方法:定点数加减
- Andorid DrawerLayout控件的使用方法
- Hibernate(一) 之 延迟加载
- cocos-js,热更新1---搭建热更服务器
- 映射
- 使用BeanUtils进行一些简单的操作
- Android官方开发文档Training系列课程中文版:通知用户之大视图通知
- Mac OS X用当前选中的文字生成便签的快捷键是什么
- PAT乙级练习题B1012. 数字分类
- 黑马程序员——Java基础---String类