Android DrawerLayout 抽屉

Android DrawerLayout 抽屉

DrawerLayout 在supportV4 Lib中,类似开源slidemenu一样,DrawerLayout父类为ViewGroup,自定义组件基本都是扩展这个类。

android.support.v4.widget.DrawerLayout

下面是个简单的用法演示。点左上角的按钮 打开抽屉菜单。

点击对应的ITEM 切换对应的内容,内容显示使用Fragment,这里没用到ActionBar来做切换

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <!-- 这里是内容区域 -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="55dp"
            android:background="#9370DB"
            android:orientation="horizontal" >

            <ImageView
                android:id="@+id/slide"
                android:layout_width="48dp"
                android:layout_height="48dp"
                android:scaleType="fitCenter"
                android:layout_gravity="center_vertical"
                android:src = "@drawable/slide"
                />            

        </LinearLayout>

        <FrameLayout
            android:id="@+id/fragment_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            >
        </FrameLayout>

    <!-- 抽屉内容 -->
    <ListView
        android:id="@+id/drawer_content"
        android:layout_width="280dp"
        android:layout_height="match_parent"
        android:listSelector="#336699"
        android:divider="#B0C4DE"
        android:dividerHeight="1px"
        android:layout_gravity="start"
        android:background="#8470FF" />

</android.support.v4.widget.DrawerLayout>
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.widget.DrawerLayout;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class DrawerLayoutActivity extends FragmentActivity {

    private DrawerLayout mDrawerLayout;
    private ListView drawerContent;//抽屉内容

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.drawer_layout);

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawerContent = (ListView) findViewById(R.id.drawer_content);
        mDrawerLayout.setDrawerListener(new DemoDrawerListener());
        addHeader(drawerContent);//ListView Header头
        drawerContent.setAdapter(new MyAdapter());
        drawerContent.setOnItemClickListener(new DrawerItemClickListener());
        findViewById(R.id.slide).setOnClickListener(new OnClickListener() {
            public void onClick(View arg0) {
                mDrawerLayout.openDrawer(drawerContent);//打开抽屉内容
            }
        });

        //显示默认的HOME
        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new HomeFragment()).commit();

    }

    private void addHeader(ListView mDrawer2) {
        View view = LayoutInflater.from(this).inflate(R.layout.list_header,null);
        mDrawer2.addHeaderView(view);
    }

    static String titles[] = { "主页", "公司", "附近", "设置" };

    class MyAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            return titles.length;
        }

        @Override
        public Object getItem(int p) {
            return titles[p];
        }

        @Override
        public long getItemId(int arg0) {
            return 0;
        }

        @Override
        public View getView(int p, View contentView, ViewGroup arg2) {
            String title = titles[p];
            View v = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item_list, null);
            TextView textView = (TextView) v.findViewById(R.id.text);
            textView.setText(title);
            return v;
        }

    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
    }

    private class DrawerItemClickListener implements
            ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
            showFragmentById(position);
            mDrawerLayout.closeDrawer(drawerContent);
        }
    }

    //切换到对应的Fragment
    public void showFragmentById(int position) {
        Fragment f = null;
        switch (position) {
        case 1:
            f = new HomeFragment();
            break;
        case 2:
            f = new CompanyFragment();
            break;
        case 3:
            f = new NearFragment();
            break;
        case 4:
            f = new SettingFragment();
            break;
        default:
            break;
        }
        if (f == null) {
            return;
        }
        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, f).commit();
    }

    //回调函数,打开或关闭时可以做一些事情
    private class DemoDrawerListener implements DrawerLayout.DrawerListener {
        @Override
        public void onDrawerOpened(View drawerView) { //打开时调用
        }

        @Override
        public void onDrawerClosed(View drawerView) { //关闭时调用
        }

        @Override
        public void onDrawerSlide(View drawerView, float slideOffset) {//滑动过程中
        }

        @Override
        public void onDrawerStateChanged(int newState) {
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        return super.onCreateOptionsMenu(menu);
    }

}

这里只写HomeFragment代码,其它几个内容都是一样的。

public class HomeFragment extends Fragment {

    public HomeFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        return inflater.inflate(R.layout.home_fg, container,false);
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        TextView textView = (TextView) view.findViewById(R.id.text);
        textView.setText("Home");
    }

}

home_fg.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

     <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="4dp"
        android:textSize="20sp"
        android:textColor="#9370DB"
        android:textStyle="bold"
        android:layout_centerInParent="true"
        />

</RelativeLayout>
时间: 2024-11-06 08:50:22

Android DrawerLayout 抽屉的相关文章

Android DrawerLayout抽屉效果

官网guide:http://developer.android.com/training/implementing-navigation/nav-drawer.html 官网示例:NavigationDrawer.zip android.support.v4.widget.DrawerLayout 抽屉layout.该widget只能实现从左向右.从右向左 openDrawer(), closeDrawer(), isDrawerOpen() 下面贴一下示例的主要的布局文件 和 activit

Android侧滑菜单DrawerLayout(抽屉布局)实现

应用场景: 由于侧滑菜单有更好的用户体验效果,所以更多的App使用侧滑抽屉式菜单列表,如网易客户端.百度影音.爱奇艺等等.至此,侧滑菜单有了更多的使用需求. 知识点介绍: 实现侧滑菜单功能的方法有很多,如果开源的项目SlidingMenu,下载地址为https://github.com/jfeinstein10/SlidingMenu.该开源项目依赖于另一个开源项目ActionBarSherlock,下载地址为https://github.com/JakeWharton/ActionBarShe

安卓笔记:DrawerLayout抽屉布局的使用

DrawerLayout(抽屉布局),在各种app中经常出现,比如csdn.. 要点: 1.使用DrawerLayout时,在xml布局中,把主界面的布局放在前面,后面才放上抽屉里的布局内容 2.记得为抽屉内的布局加上android:layout_gravity="left"或"start",指明抽屉出现在哪一侧. 代码如下所示: activity_drawer.xml <RelativeLayout xmlns:android="http://sc

google 原生态 抽屉式侧滑菜单 Android DrawerLayout 布局的使用介绍

废话不多说,直接上效果图: 其实谷歌官方已经给出了一个 关于DrawerLayout 使用的例子,只是处于 国内不能访问谷歌官网,看不到详细文档说明,所以在此 简单记录下  侧滑 抽屉式菜单的使用说明 1.由于 DrawerLayout 需要 android.support.v4 包的支持,所以,你的libs 下面不要包含 这个包. 2.首先布局文件如下 <android.support.v4.widget.DrawerLayout xmlns:android="http://schema

Android DrawerLayout实现抽屉效果

官网:https://developer.android.com/training/implementing-navigation/nav-drawer.html 贴上主要的逻辑和布局文件: activity_main.xml <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schema

android.support.v4.widget.DrawerLayout 抽屉效果导航菜单

抽屉效果导航菜单图示 如图所示,抽屉效果的导航菜单不用切换到另一个页面,也不用去按菜单的硬件按钮,直接在界面左上角的一个按钮点击,菜单就滑出来,而且感觉能放很多东西 概况:实现上图所示的抽屉效果的导航菜单有以下两种方式 方式1.用SlidingDrawer: http://developer.android.com/reference/android/widget/SlidingDrawer.html 但是不知道为什么这个类官方不建议再继续用了: Deprecated since API lev

Android DrawerLayout Plus 增强版抽屉菜单

DrawerLayout是官方提供的侧滑菜单,相比SliddingMenu,它更加轻量级.默认情况下,DrawerLayout可以设置左侧或者右侧滑出菜单.如下, xml布局: [html] view plain copy print? <!-- <!-- A DrawerLayout is intended to be used as the top-level content view using match_parent for both width and height to cons

Android -- DrawerLayout

抽屉效果的导航菜单 喜欢知乎的都应该装的用知乎日报吧~这里指Android的不是IOS的.知乎日报的导航菜单就是用DrawerLayout实现的. 觉得这种侧滑的抽屉效果的菜单很好. 不用切换到另一个页面,也不用去按菜单的硬件按钮,直接在界面上一个按钮点击,菜单就滑出来,而且感觉能放很多东西. android-support-v4.jar 首先, DrawerLayout这个类是在Support Library里的,需要加上android-support-v4.jar这个包. 然后程序中用时在前

Android侧滑抽屉效果实现

1.先看效果图 2.说明 2.1目前市场上面很多软件都流行这种抽屉小果的实现,就我而言,这种设计是比较容易搭建框架的,而且UI效果也是非常不错的. 3 文章引用 3.1.Android 抽屉效果的导航菜单实现 3.2Android官方终于支持 Navigation Drawer(导航抽屉)模式 4.库的引用 4.1首先, DrawerLayout这个类是在Support Library里的,需要加上android-support-v4.jar这个包. 4.2然后程序中用时在前面导入import