185.m1-DrawerLayout的应用

来源:互联网 发布:哪里购买域名续费便 编辑:程序博客网 时间:2024/05/21 22:39

首先布局文件activity_main.xml布局是由android.support.v4.widget.DrawerLayout开始,然后里面一个线性布局一个FrameLayout

<android.support.v4.widget.DrawerLayout 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"     android:id="@+id/dl"><LinearLayout     android:layout_width="match_parent"    android:layout_height="match_parent"    >        <TextView         android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="asd"        /></LinearLayout><!-- 抽屉 -->    <FrameLayout         android:layout_width="match_parent"        android:layout_height="match_parent"        android:background="@drawable/bg_tab"        android:layout_gravity="left">            </FrameLayout></android.support.v4.widget.DrawerLayout>

逻辑代码MainActivity.java实现了滑动的抽屉效果,同时实现了Home图标的点击的抽屉效果

点击的抽屉效果的时候需要让图标显示,同时作为按钮可见

/让拉出显示详情的图片显示,可以拉出详情actionBar.setDisplayHomeAsUpEnabled(true);//让按键点击有效actionBar.setHomeButtonEnabled(true);

需要让ActionBar和开关建立关系

//  让开关和actionbar建立关系 drawerToggle.syncState();

同时由于ActionBar也会处理点击事件,因此需要在ActionBar将点击事件抛出之前处理图标的点击事件

//优先处理drawerToggle的点击,drawerToggle出不不了交给父类return drawerToggle.onOptionsItemSelected(item)|super.onOptionsItemSelected(item);

全部代码如下

package com.ldw.market;import junit.framework.AssertionFailedError;import android.annotation.SuppressLint;import android.content.Intent;import android.os.Bundle;import android.support.v4.app.ActionBarDrawerToggle;import android.support.v4.app.FragmentTransaction;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.app.ActionBar.Tab;import android.support.v7.app.ActionBar.TabListener;import android.support.v7.app.ActionBarActivity;import android.support.v7.widget.SearchView;import android.support.v7.widget.SearchView.OnQueryTextListener;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Toast;public class MainActivity extends ActionBarActivity implements OnQueryTextListener{private DrawerLayout mDrawerLayout;private ActionBarDrawerToggle drawerToggle;private ViewPager mViewPager;private PagerTabStrip pager_tab_strip;private String[] tab_names;  // 标签的名字    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //添加tab标签名        ActionBar actionBar = getSupportActionBar();actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);Tab tab1=actionBar.newTab().setText("标签一").setTabListener(new MyTabListener());actionBar.addTab(tab1);Tab tab2=actionBar.newTab().setText("标签2").setTabListener(new MyTabListener());actionBar.addTab(tab2);Tab tab3=actionBar.newTab().setText("标签3").setTabListener(new MyTabListener());actionBar.addTab(tab3);Tab tab4=actionBar.newTab().setText("标签4").setTabListener(new MyTabListener());actionBar.addTab(tab4);//让拉出显示详情的图片显示,可以拉出详情actionBar.setDisplayHomeAsUpEnabled(true);//让按键点击有效actionBar.setHomeButtonEnabled(true);mDrawerLayout = (DrawerLayout) findViewById(R.id.dl);//ActionBarDrawerToggle是ActionBar控制抽屉,//参数1:当前actionBar的Activity,参数2:控制的抽屉,参数3:按钮的图片,参数4和5是描述drawerToggle = new ActionBarDrawerToggle(this,mDrawerLayout, R.drawable.ic_drawer_am, R.string.open_drawer,R.string.close_drawer){@Overridepublic void onDrawerClosed(View drawerView) {super.onDrawerClosed(drawerView);Toast.makeText(getApplicationContext(), "抽屉关闭了", 0).show();}@Overridepublic void onDrawerOpened(View drawerView) {super.onDrawerOpened(drawerView);Toast.makeText(getApplicationContext(), "抽屉打开了", 0).show();}};//设置监听DrawerListenermDrawerLayout.setDrawerListener(drawerToggle);//  让开关和actionbar建立关系 drawerToggle.syncState();    }        private class MyTabListener implements TabListener{@Overridepublic void onTabReselected(Tab arg0, FragmentTransaction arg1) {// TODO Auto-generated method stub}@Overridepublic void onTabSelected(Tab arg0, FragmentTransaction arg1) {// TODO Auto-generated method stub}@Overridepublic void onTabUnselected(Tab arg0, FragmentTransaction arg1) {// TODO Auto-generated method stub}        }        //初始化ActionBar的界面    @SuppressLint("NewApi") @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        // 如果运行的环境 (部署到什么版本的手机 )大于3.0,低版本的不支持        if (android.os.Build.VERSION.SDK_INT > 11) {        SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();searchView.setOnQueryTextListener(this);// 搜索的监听   }          return true;    }        public void click(View v){    Intent intent = new Intent(getApplicationContext(), DetailActivity.class);    startActivity(intent);    }        /** 处理actionBar菜单条目的点击事件 */    @Overridepublic boolean onOptionsItemSelected(MenuItem item) {System.out.println("所有");//当前点击的条目是searchif (item.getItemId() == R.id.action_search) {Toast.makeText(getApplicationContext(), "搜索", 0).show();}//优先处理drawerToggle的点击,drawerToggle出不不了交给父类return drawerToggle.onOptionsItemSelected(item)|super.onOptionsItemSelected(item);}// 当搜索提交的时候@Overridepublic boolean onQueryTextChange(String arg0) {Toast.makeText(getApplicationContext(), arg0, 0).show();return false;}// 当搜索的文本发生变化@Overridepublic boolean onQueryTextSubmit(String arg0) {Toast.makeText(getApplicationContext(), arg0, 0).show();return false;}    }