Android开发-DrawerLayout

1.MainActivity

  1 package com.example.drawerlayoutdemo;
  2
  3 import java.util.ArrayList;
  4
  5 import android.app.Activity;
  6 import android.app.Fragment;
  7 import android.app.FragmentManager;
  8 import android.content.Intent;
  9 import android.content.res.Configuration;
 10 import android.net.Uri;
 11 import android.os.Bundle;
 12 import android.support.v4.app.ActionBarDrawerToggle;
 13 import android.support.v4.widget.DrawerLayout;
 14 import android.view.Menu;
 15 import android.view.MenuItem;
 16 import android.view.View;
 17 import android.widget.AdapterView;
 18 import android.widget.AdapterView.OnItemClickListener;
 19 import android.widget.ArrayAdapter;
 20 import android.widget.ListView;
 21
 22 public class MainActivity extends Activity implements OnItemClickListener {
 23
 24     private DrawerLayout mDrawerLayout;
 25     private ListView mDrawerList;
 26     private ArrayList<String> menuLists;
 27     private ArrayAdapter<String> adapter;
 28     private ActionBarDrawerToggle mDrawerToggle;
 29     private String mTitle;
 30
 31     @Override
 32     protected void onCreate(Bundle savedInstanceState) {
 33         super.onCreate(savedInstanceState);
 34         setContentView(R.layout.activity_main);
 35         mTitle = (String) getTitle();
 36         mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
 37         mDrawerList = (ListView) findViewById(R.id.left_drawer);
 38         menuLists = new ArrayList<String>();
 39         for(int i = 0; i < 5; i++){
 40             menuLists.add("菜单" + i);
 41         }
 42         adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,menuLists);
 43         mDrawerList.setAdapter(adapter);
 44
 45         mDrawerList.setOnItemClickListener(this);
 46
 47         mDrawerToggle = new ActionBarDrawerToggle(this,mDrawerLayout,R.drawable.ic_launcher,R.string.drawer_open,R.string.drawer_close){
 48             @Override
 49             public void onDrawerOpened(View drawerView) {
 50                 super.onDrawerOpened(drawerView);
 51                 getActionBar().setTitle("请选择");
 52                 invalidateOptionsMenu();//会自动Call onPrepareOptionMenu()
 53             }
 54
 55             @Override
 56             public void onDrawerClosed(View drawerView) {
 57                 super.onDrawerClosed(drawerView);
 58                 getActionBar().setTitle(mTitle);
 59                 invalidateOptionsMenu();//会自动Call onPrepareOptionMenu()
 60             }
 61         };
 62
 63         mDrawerLayout.setDrawerListener(mDrawerToggle);
 64
 65         //开启ActionBar上APP ICON的功能
 66         getActionBar().setDisplayHomeAsUpEnabled(true);
 67         getActionBar().setHomeButtonEnabled(true);
 68     }
 69
 70     @Override
 71     public boolean onCreateOptionsMenu(Menu menu) {
 72         // Inflate the menu; this adds items to the action bar if it is present.
 73         getMenuInflater().inflate(R.menu.main, menu);
 74         return true;
 75     }
 76
 77     @Override
 78     public boolean onPrepareOptionsMenu(Menu menu) {
 79         boolean isDrawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
 80         menu.findItem(R.id.action_websearch).setVisible(!isDrawerOpen);
 81         return super.onPrepareOptionsMenu(menu);
 82     }
 83
 84     @Override
 85     public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
 86         //动态插入一个Fragment到FrameLayout中
 87         Fragment contentFragment = new ContentFragment();
 88         Bundle args = new Bundle();
 89         args.putString("text", menuLists.get(position));
 90         contentFragment.setArguments(args);
 91         FragmentManager fm = getFragmentManager();
 92         fm.beginTransaction().replace(R.id.content_frame, contentFragment).commit();
 93         mDrawerLayout.closeDrawer(mDrawerList);
 94     }
 95
 96     @Override
 97     protected void onPostCreate(Bundle savedInstanceState) {
 98         super.onPostCreate(savedInstanceState);
 99         //需要将ActionDrawerToggle与DrawerLayout的状态同步
100         //将ActionBarDrawerToggle的drawer图标,设置为ActionBar中的Home-button
101         mDrawerToggle.syncState();
102     }
103
104     @Override
105     public void onConfigurationChanged(Configuration newConfig) {
106         mDrawerToggle.onConfigurationChanged(newConfig);
107         super.onConfigurationChanged(newConfig);
108     }
109
110     @Override
111     public boolean onOptionsItemSelected(MenuItem item) {
112         //将ActionBar上的图标与Drawer结合起来
113         if(mDrawerToggle.onOptionsItemSelected(item)){
114             return true;
115         }
116         switch (item.getItemId()) {
117         case R.id.action_websearch:
118             Intent intent = new Intent();
119             intent.setAction("android.intent.action.VIEW");
120             Uri uri = Uri.parse("http://www.jikexueyuan.com");
121             intent.setData(uri);
122             startActivity(intent);
123             break;
124
125         default:
126             break;
127         }
128         return super.onOptionsItemSelected(item);
129     }
130
131 }

2.ContentFragment

 1 package com.example.drawerlayoutdemo;
 2
 3 import android.app.Fragment;
 4 import android.os.Bundle;
 5 import android.view.LayoutInflater;
 6 import android.view.View;
 7 import android.view.ViewGroup;
 8 import android.widget.TextView;
 9
10
11
12 public class ContentFragment extends Fragment {
13
14     private TextView textView;
15     @Override
16     public View onCreateView(LayoutInflater inflater, ViewGroup container,
17             Bundle savedInstanceState) {
18         View view = inflater.inflate(R.layout.fragment_content, container, false);
19         textView = (TextView) view.findViewById(R.id.textView);
20         String text = getArguments().getString("text");
21         textView.setText(text);
22         return view;
23     }
24 }

3.activity_main

 1 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     android:id="@+id/drawer_layout"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent" >
 5
 6     <FrameLayout
 7         android:id="@+id/content_frame"
 8         android:layout_width="match_parent"
 9         android:layout_height="match_parent" >
10     </FrameLayout>
11
12     <ListView
13         xmlns:android="http://schemas.android.com/apk/res/android"
14         android:id="@+id/left_drawer"
15         android:layout_width="240dp"
16         android:layout_height="match_parent"
17         android:layout_gravity="start"
18         android:background="#ffffffcc"
19         android:choiceMode="singleChoice"
20         android:divider="@android:color/transparent" >
21     </ListView>
22
23 </android.support.v4.widget.DrawerLayout>

4.fragment_content

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6
 7     <TextView
 8         android:id="@+id/textView"
 9         android:layout_width="match_parent"
10         android:layout_height="match_parent"
11         android:textSize="25sp"
12         android:text="fse">
13     </TextView>
14
15 </LinearLayout>

5.menu main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/action_websearch"
        android:icon="@drawable/ic_launcher"
        android:showAsAction="ifRoom|withText"
        android:title="webSearch">
    </item>

</menu>

6.注意事项                                                                    

时间: 2024-08-09 13:09:14

Android开发-DrawerLayout的相关文章

android 开发 drawerlayout出现退不回去的情况

问题原因: id_framelayout2 写在 id_linearlayout2 的后面了: 注意记得写: android:layout_gravity="start" 正确: <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/

Android开发笔记(一百二十)两种侧滑布局

SlidingPaneLayout SlidingPaneLayout是Android在android-support-v4.jar中推出的一个可滑动面板的布局,在前面<Android开发笔记(一百零一)滑出式菜单>中,我们提到水平布局时的LinearLayout无法自动左右拉伸,必须借助于手势事件才能拉出左侧隐藏的布局,现在SlidingPaneLayout便是为了解决LinearLayout无法自动拉伸的缺陷.只要我们在布局文件的SlidingPaneLayout节点下定义两个子布局,那么

50、转自知乎上android开发相见恨晚的接口

原文链接:http://www.zhihu.com/question/33636939 程序员软件开发Android 开发JavaAndroid修改 Android开发中,有哪些让你觉得相见恨晚的方法.类或接口?修改 Android(Java)开发中,有哪些方法或类(接口)很实用,但是你却没能在第一时间知道它?当有一天你发现它时,只想说一句:“What the f**k,还有这个!”修改 举报 添加评论分享• 邀请回答 按投票排序按时间排序 28 个回答 赞同123反对,不会显示你的姓名 Roc

【转】Android开发笔记(序)写在前面的目录

原文:http://blog.csdn.net/aqi00/article/details/50012511 知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经验教训,与网友互相切磋,从而去芜存菁进一步提升自己的水平.因此博主就想,入门的东西咱就不写了,人不能老停留在入门上:其次是想拾缺补漏,写写虽然小众却又用得着的东西:另外就是想以实用为主,不求大而全,但求小而精:还有就是有的知识点是java的,只是Android开发也会经常遇上,所以蛮记下来.个人的经

Android 开发中使用 Recyclerview

Android 开发中 Recyclerview 的使用 Overview 学习自:博客园 CSDN Android 官方文档 Android 呈现数据的方式有很多种,使用自定义控件,使用 ListView,使用Recyclerview. 那么我们今天看一下Android 中 如是使用 Recyclerview. 声明依赖性 官方文档所示,我们需要声明以下依赖性: dependencies { implementation "androidx.recyclerview:recyclerview:

Android开发之入口Activity

原文:Android开发之入口Activity Android开发之入口Activity Adnroid App是如何确定入口Activity的? 难道就因为class的类名叫MainActivity,布局文件叫activity_main.xml? 如果这样认为,就大错特错了. 之所以能够确定入口Activity,是因为在应用的清单文件中有所配置,系统会根据应用的清单文件(AndroidManifest.xml)来确立. 如何确立,标志是什么? 我们来看一下清单文件,便一目了然: 对了,系统能够

2062326 齐力锋 实验四《Java面向对象程序设计Android开发》实验报告

北京电子科技学院(BESTI) 实 验 报 告 课程: 程序设计与数据结构  班级: 1623  姓名: 齐力锋 学号: 20162326 成绩: 指导教师: 娄嘉鹏/王志强 实验日期: 2017年5月26日 实验密级:非密级 预习程度: 优良 实验时间: 2 Hours 仪器组次: 必修/选修: 必修 实验序号: 04 实验名称:Java面向对象程序设计Android开发 实验内容 1.Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPUBI

Android开发系列之SQLite

上篇博客提到过SQLite.它是嵌入式数据库,因为其轻巧但功能强大,被广泛的用于嵌入式设备其中.后来在智能手机.平板流行之后,它作为文件型数据库,差点儿成为了智能设备单机数据库的必选,能够随着安卓app打包到apk文件其中. SQLite的官方站点是http://www.sqlite.org/,能够随意下载,上面也有详尽的文档能够參考,这篇博客重点关注SQLite在Android开发中怎样使用. 在Android开发中.推荐建立一个类继承自SQLiteOpenHelper来创建数据库操作类,比方

Android开发之手把手教你写ButterKnife框架(二)

欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/52664112 本文出自:[余志强的博客] 上一篇博客Android开发之手把手教你写ButterKnife框架(一)我们讲了ButterKnife是什么.ButterKnife的作用和功能介绍以及ButterKnife的实现原理. 本篇博客主要讲在android studio中如何使用apt. 一.新建个项目, 然后创建一个module名叫processor 新建m