0
点赞
收藏
分享

微信扫一扫

Andorid DrawerLayout控件的使用方法


一、概述:

1、效果图:

Andorid DrawerLayout控件的使用方法_ide


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 条评论