Android学习笔记十九之Menu菜单
- 格式:doc
- 大小:106.00 KB
- 文档页数:12
Android实现侧滑菜单侧滑菜单的实现在很多应用中都有所体现。
例如:QQ侧滑、微信侧滑等等,几乎是各个领域中的应用都有所涉及。
与此同时,实现侧滑的方式也是比比皆是。
下面为大家介绍其中一种的实现方式:自定义View实现侧滑菜单。
效果展示:具体的使用自定义View实现之前先理解一下原始的实现原理:1、使用ViewGroup存放2个View,一个是Menu菜单,一个是显示内容的Content2、监听比比皆是onTouchEvent事件处理ACTION_MOVE中的leftMargin位置,从而改变menu菜单的滑动位置当ACTION_UP时,根据显示菜单的宽度,决定将其显示或隐藏动画效果:(1)使用Scroller这个辅助类实现动画效果(2)单起一个Thread(或Task)来改变leftMargin的大小来实现动画效果3、使用自定义View实现侧滑菜单的实现原理:(1)自定义HorizontalScrollView(可自动左右滑动)子类,重写构造方法、onMesure、onLayout、onTouchEvent方法。
[1] onMesure:决定内部View的宽和高wallper = (LinearLayout) getChildAt(0);// 获取menu(菜单布局)实例menu = (ViewGroup) wallper.getChildAt(0);// 获取content(内容布局)实例content = (ViewGroup) wallper.getChildAt(1);// 设置menu的宽度menu_width = menu.getLayoutParams().width = screen_width- menu_rightpadding;// 设置content的宽度content.getLayoutParams().width = screen_width;[2] onLayout:决定子View的放置位置// 为正值,表示为内容区域向左移动if (changed) {this.scrollTo(menu_width, 0);}[3]onTouchEvent:决定内部View的移动监听case MotionEvent.ACTION_UP:int scrollX = getScrollX();// 内容区域左侧多出来的部分--隐藏在左边的宽度if (scrollX>= menu_width / 2) {// smoothScrollTo隐藏(内容区域)效果相对缓和this.smoothScrollTo(menu_width, 0);isopen = false;} else {// 内容区域左边与屏幕合并this.smoothScrollTo(0, 0);isopen = true;}returntrue;[4]构造方法:(1)获取屏幕的宽度,以便于后面根据侧滑的比率判断是否显示子菜单;WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);DisplayMetricsoutMetrics = new DisplayMetrics();// 将当前窗口的信息放在DisplayMetrics中manager.getDefaultDisplay().getMetrics(outMetrics);screen_width = outMetrics.widthPixels;(2)将菜单栏距右侧距离dp转换为像素值px(自定义参数)menu_rightpadding = a.getDimensionPixelSize(attr,(int) TypedValue.applyDimension(PLEX_UNIT_DIP, 50,context.getResources().getDisplayMetrics()));(2)引入自定义属性,允许用户自定义菜单距离屏幕右侧的边距[1] 书写xml文件<resources><attr name="rightPadding"format="dimension"></attr><declare-styleable name="SlidingMenu"><attr name="rightPadding"></attr></declare-styleable></resources>[2]布局中添加自定义属性的xmlnsxmlns:auto="/apk/res/com.example.fragment_horizontalscrollview"[3]构造方法中实现// 获取自定义的属性TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.SlidingMenu, defStyle, 0);int n = a.getIndexCount();for (int i = 0; i< n; i++) {// 遍历所有属性int attr = a.getIndex(i);switch (attr) {case R.styleable.SlidingMenu_rightPadding:menu_rightpadding = a.getDimensionPixelSize(attr,(int) TypedValue.applyDimension(PLEX_UNIT_DIP, 50, context.getResources().getDisplayMetrics()));Break;default:break;}}(3)布局中引入自定义属性auto:rightPadding="100dp"(4)引入nineoldandroids-2.4.0.jar(提供较低版本兼容性)nineoldandroids-2.4.0.jar(5)主界面中调用切换方法。
Android⼿机常⽤的三个键,home键,back键及menu键。
public class BackKeyTest extends Activity{/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(yout.main);}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event){if (keyCode == KeyEvent.KEYCODE_BACK ){// 创建退出对话框AlertDialog isExit = new AlertDialog.Builder(this).create();// 设置对话框标题isExit.setTitle("系统提⽰");// 设置对话框消息isExit.setMessage("确定要退出吗");// 添加选择按钮并注册监听isExit.setButton("确定", listener);isExit.setButton2("取消", listener);// 显⽰对话框isExit.show();}return false;}/**监听对话框⾥⾯的button点击事件*/DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener(){public void onClick(DialogInterface dialog, int which){switch (which){case AlertDialog.BUTTON_POSITIVE:// "确认"按钮退出程序finish();break;case AlertDialog.BUTTON_NEGATIVE:// "取消"第⼆个按钮取消对话框break;default:break;}}};}⼩结:Android⼿机常⽤的三个键,home键,back键及menu键。
1.在android程序中,Log.d()用于输出什么级别的日志信息?(A)A、调试B、信息C、警告D、错误2.以下情况不会创建Context对象的是(C)A.3.以下不属于Android中广播中的类别的是(D)A.Normal BroadcasB.Sticky BroadcastC.Local BroadcastD.Order broadcast4.以下哪个不是Intent的Activity启动方式〔A〕5.安卓AndroidManifest.xml文件的子节点不包括(C)A.applicationB.servicesC.permissionD.provider6.下面那个不是Fragment的生命周期方法〔D〕A. onStartB. onAttachC. onDestoryViewD. onRestart7.下面那种不是安卓原生支持的Menu(A)A.Selected MenuB.Option MenuC.SubmenuD.Context Menu8.下面不属于android的动画分类的有(D)A、TweenB、FrameC、PropertyD、Animation9.以下哪个不是安卓service自带的方法(A)A.10.以下属于SAX解析xml文件的优点的是(B)A、将整个文档树在内存中,便于操作,支持删除,修改,重新排列等多种功能B、不用事先调入整个文档,占用资源少C、整个文档调入内存,浪费时间和空间D、不是长久驻留在内存,数据不是持久的,事件过后,假设没有保存数据,数据就会消失11.以下关于Soundpool和MediaPlayer的说法,错误的选项是(A)D.new MediaPlayer()后要调用prepare()方法才能播放12.关于res/raw目录说法正确的选项是(A)A、这里的文件是原封不动的存储到设备上不会转换为二进制的格式B、这里的文件是原封不动的存储到设备上会转换为二进制的格式C、这里的文件最终以二进制的格式存储到指定的包中D、这里的文件最终不会以二进制的格式存储到指定的包中13.下面异常不属于Runtime Exception 的是〔D〕A、ArithmeticExceptionB、IllegalArgumentExceptionC、NullPointerExceptionD、IOException14.以下方法那个不能实现不显示android标题栏〔B〕A.在Activity的Oncreate方法中写,this.requestWindowFeature(Window.FEATURE_NO_TITLE);C.在manifest设置Activity的节点 android:theme="@android:style/Theme.NoTitleBar"D.在style中定义 <item name="android:windowNoTitle">true</item> 后在manifest中引用15.以下对android NDK的理解正确的选项是(D)A、 NDK是一系列工具的集合B、 NDK 提供了一份稳定、功能有限的 API 头文件声明。
Android 学习笔记-让我们快速上手吧Google 的 Android SDK 发布也有一段时间了,一直想研究一下却苦于找不到时间。
利用这个周未,开始强迫自己再次进入学习状态,原因很简单:我看好开放的 gPhone。
SDK 的下载与安装并不复杂, 网上也有不少同学已经进入状态了, 我就不再重复了吧。
今天主要讨论的,还是永远不变的话题:Hello World.1.最简单的 HelloWorld安装了 SDK 后,直接生成一个 Android Project,一句代码不用写,就能跑出一个最 简单的 HelloWorld 例程。
我们看一下它的代码:public void onCreate(Bundle icicle) {super.onCreate(icicle);setTheme(android.R.style.Theme_Dark);setContentView(yout.main);}看上去实在很简单,只有两句话而已。
关键在这个 yout.main 上,凭直觉,这 应该是定义的资源。
的确,在 R.java 中只是定义了一个 static int 而已,真正的资源 描述在 res/layout/main.xml文件里(注意:这里的 R.java 不要手工编辑,每次 build project 时它都会根据 res 下的资源描述被自动修改)。
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent">android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="Hello World"/></LinearLayout>这个文件很好读 , 一个描述了这是一个线性排列的布局 , android:orientation=vertical 表示所有组件将纵向排布。
android slidemenu 用法
在Android中,使用SlideMenu(滑动菜单)可以实现一个侧边栏效果,用户可以通过手势滑动或点击按钮来打开或关闭侧边栏。
下面是实现的步骤:
1. 选择继承ViewGroup来实现。
首先考虑子view的布局,即如何重写onLayout方法。
2. 可以像FrameLayout一样,将菜单的布局放在下面,内容的布局放在上面,通过上层内容视图的滑动来显示下面的视图。
3. 可以像LinearLayout一样,从左向右依次布局。
起始时,先向左滑动一段距离(菜单的宽度)以隐藏掉菜单。
4. 直接将菜单的布局放置在屏幕可见区域外。
如菜单布局的宽度为200,那么就可以使用`final int width= menuView.getMeasuredWidth(); yout(-width,0, 0, menuView.getMeasuredHeight());`。
你也可以试试DrawerLayout或SlidingMenu,这些方法比上述方法更好用。
如需了解更多关于Android SlideMenu的用法,你可以查阅其他相关的文档或源代码。
menu命令的用法-回复"menu"命令是一种在计算机操作系统中常用的命令,它用于显示当前系统可用的菜单选项和操作。
无论是在命令行界面还是图形用户界面中,"menu"命令都可以方便地为用户提供一个可选的菜单列表,从而简化操作和提高效率。
本文将详细介绍"menu"命令的用法,并提供实际示例以帮助读者更好地理解。
一、什么是"menu"命令"menu"命令是一种常见的操作系统命令,它用于显示和操作菜单选项。
通过运行"menu"命令,用户可以看到当前系统中可用的菜单,以及执行每个菜单选项所需的操作。
这种命令通常用于交互式的命令行环境或图形用户界面中,因为它可以提供一种用户友好的方式来组织和管理各种功能。
二、"menu"命令的基本用法1. 以命令行方式运行"menu"命令。
在大多数操作系统中,可以通过打开命令行终端并输入"menu"命令来启动菜单。
2. 显示菜单选项。
一旦"menu"命令被执行,系统将显示一个名称列表,每个名称对应一个菜单选项。
用户可以通过键盘输入选择一个菜单选项的索引号或名称。
3. 执行菜单选项操作。
一旦用户选择了一个菜单选项,系统将根据菜单的定义执行相应的操作。
这可能包括运行其他命令、打开应用程序、显示文件等。
三、"menu"命令的示例用法下面是一个具体的示例,演示了如何使用"menu"命令来创建一个简单的菜单,并定义每个菜单选项的操作。
1. 创建一个菜单文件。
首先,我们需要创建一个文本文件,将其中每一行作为一个菜单选项。
例如,使用文本编辑器创建一个名为"menu.txt"的文件,并将以下内容添加到其中:1. 打开文件A2. 打开文件B3. 复制文件C4. 删除文件D2. 运行"menu"命令。
一、Android学习第一天——环境搭建Android 开发环境的搭建环境搭建需要①Android SDK ②JDK ③eclipse环境搭建开始:㈠将Android SDK与JDK解压,最好路径中不要出现汉字,然后配置环境变量,方便命令行操作㈡为eclipse(3.4.1)安装开发Android插件——Android ADTHelp-->Install New Software输入:https:///android/eclipse便会自动检测出所需要安装的东西,点击install即可。
㈢重启eclipse,进行Android SDK的配置。
Windows-->Preferences-->Android找到你解压的Android SDK的路径即可。
㈣新建一个Android Project来验证平台是否搭建成功。
注:我上面步骤走下来之后发现我在运行程序时,没有Android Virtual Devices(AVD)的选项。
这时可以在Windows-->Android SDK Manager中找到你所需要安装版本,进行安装。
搭建过程还是比较顺利,加油~二、Android学习第二天——初识Activity昨天程序搭建成功以后,就可以开发跟运行Android应用程序了,因为Activity是开发中不可或缺的组成部分,所以要对Activity有所认识。
以下两点是需要注意的:(个人总结)1.凡是覆写得方法,在方法体中的第一行一定是super.XXX(),一定要先调用父类里的相应方法做必要的事情,再根据自己的需求去写其他的代码。
2.如果是从头学习安卓开发,不一定要开发最新的版本,可以在较低版本(2.3.3)下进行开发,然后在高版本(4.0)下进行编译与运行,这样可以提高代码的适应能力,可以兼容高级版本。
下面对我今天的学习进行个小结:首先Android的四个重要部分①Activity——形象点就是一个应用程序的门面,我们在手机上看到的图形界面②Intent——它就像一个搬用工,用于Activity之间传递数据,就像请求③Service——这个是不可见的,是为整个应用程序提供服务支持的底层④Content Provider——为应用程序提供数据的接口上面的描述我自己感觉也比较抽象,今天专门研究了Activity,终于守得云开见月明:首先进行以下学习之前需要对Android的工程项目目录有一个总体的了解:自己总结:src下是我们自己写得程序;gen下是我们创建程序时系统自动生成的,切忌勿修改assets是一个资源库,与res的区别是不会自动在R.java中自动生成idres是一个资源库,与assets不同的是,每增加一个资源(图片等),会自动在R.java 中生成对应的idlayout用于存放布局文件,用来控制Activity的显示格局string.xml中存放的一个一个键值对,Activity可以对其进行提取AndroidManifest.xml是系统比较重要的一个文件,存放Activity的注册信息,每生成一个Activity就应该在这里注册一个。
menu标签的用法Menu标签的用法在HTML中,<menu>标签用于表示文档中的菜单。
它可以包含多个菜单项,每个菜单项都是一个链接或按钮,点击后可以执行相应的操作。
下面是一些<menu>标签的用法:1. 简单菜单使用<menu>标签可以创建一个简单的菜单,菜单项使用<li>标签进行包装。
例如:<menu><li><a href="#">菜单项1</a></li><li><a href="#">菜单项2</a></li><li><a href="#">菜单项3</a></li></menu>在上面的例子中,创建了一个包含3个菜单项的简单菜单。
每个菜单项都是由<li>标签和<a>标签组成,通过设置href属性可以指定菜单项的链接地址。
2. 上下文菜单使用<menu type="context">可以创建上下文菜单,它通常在鼠标右键点击时出现。
例如:<menu type="context"><li><a href="#">菜单项1</a></li><li><a href="#">菜单项2</a></li><li><a href="#">菜单项3</a></li></menu>在上面的例子中,创建了一个包含3个菜单项的上下文菜单。
当鼠标右键点击指定的元素时,上下文菜单将会显示。
Android学习笔记十九之Menu菜单之前我们已经学习过Android的基本UI控件和Android的五大布局LinearLayout线性布局、RelativeLayout相对布局、FrameLayout帧布局、GridLayout网格布局和TableLayout表格布局,下面我们来学习Android的其他控件,这些控件能让我们的APP更加友好和人性化。
Menu菜单今天我们来学习第一个友好交互控件,Menu菜单。
在AndroidOS中,Menu菜单有三种,分别是:OptionMenu(选项菜单)、ContextMenu(上下文菜单)和SubMenu(子菜单)。
下面我们分别来介绍一下它们。
OptionMenu选项菜单OptionMenu是Android中最常见的菜单,通过手机上的Menu键可以唤出。
使用方法非常简单,只需要重写onCreateOptionsMenu(Menu menu)和onOptionsItemSelected(MenuItem item)这两个方法即可,前者是OptionMenu创建的时候调用,完成初始化,只调用一次;后者是菜单项被选中是触发的事件,在这里完成Menu选项事件处理。
除了这两个方法之外,我们还可以重写OptionMenu的以下三个方法:onOptionsMenuClosed(Menu menu)菜单关闭时候回调方法、onPrepareOptionsMenu(Menu menu)菜单显示前回调方法、onMenuOpened(int featureId, Menu menu)菜单打开之后回调方法。
下面我们通过一个例子说明:Activity代码:package com.example.menudemo;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.view.Menu;import android.view.MenuItem;import android.widget.TextView;/*** Created by Devin on 2016/7/4.*/public class OptionMenuActivity extends AppCompatActivity {private final static int BASKETBALL = 10001;private final static int FOOTBALL = 10002;private final static int VOLLEYBALL = 10003;private final static int BALLOON = 10004;private final static int PINGPONG = 10005;private final static int BASEBALL = 10006;private TextView tv_option_menu;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState);setContentView(yout.activity_optionmenu);tv_option_menu = (TextView) findViewById(_option_menu); }@Overridepublic boolean onCreateOptionsMenu(Menu menu) {//int groupId, int itemId, int order, CharSequence titlemenu.add(1, BASKETBALL, 2, "篮球");menu.add(1, FOOTBALL, 3, "足球");menu.add(1, VOLLEYBALL, 4, "排球");menu.add(1, BALLOON, 5, "气球");menu.add(1, PINGPONG, 6, "乒乓球");menu.add(1, BASEBALL, 7, "棒球");return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case BASKETBALL:tv_option_menu.setText("你喜欢篮球吗?");break;case FOOTBALL:tv_option_menu.setText("你喜欢足球吗?");break;case VOLLEYBALL:tv_option_menu.setText("你喜欢排球吗?");break;case BALLOON:tv_option_menu.setText("你喜欢气球吗?");break;case PINGPONG:tv_option_menu.setText("你喜欢乒乓球吗?");break;case BASEBALL:tv_option_menu.setText("你喜欢棒球吗?");break;}return super.onOptionsItemSelected(item);}}实现效果图:这里实现比较简单,就不在做很多的介绍了。
添加菜单有两种方法,可以通过定义XML文件,然后调用getMenuInflater().inflate(R.menu.menu_main, menu)加载,也可以像上面例子一样通过代码添加,即是add的方法。
ContextMenu上下文菜单当我们长时间按住一个View组件的时候,会弹出一个菜单,那个菜单就是ContextMenu。
使用ContextMenu需要经历如下三个步骤:第一步是重写onCreateContextMenu(ContextMenu menu, View view,ContextMenuInfo menuInfo)方法,第二步是为view组件注册上下文菜单,即是调用registerForContextMenu(View) 方法,第三步是给菜单项指定事件监听器,即是重写onContextItemSelected(MenuItem item)方法,下面我们用一个例子说明一下:上面我们已经实现了用代码加载菜单项,现在我们采用XML文件来加载菜单项,这样修改的时候只需要修改XML文件即可,也减轻了Java代码的臃肿。
Activity代码:package com.example.menudemo;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.view.ContextMenu;import android.view.MenuInflater;import android.view.MenuItem;import android.view.View;import android.widget.Button;import android.widget.Toast;/*** Created by Devin on 2016/7/4.*/public class ContextMenuActivity extends AppCompatActivity {private Button btn_show_context_menu;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_contextmenu);btn_show_context_menu = (Button) findViewById(R.id.btn_show_context_menu);registerForContextMenu(btn_show_context_menu);}@Overridepublic void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {MenuInflater menuInflater = new MenuInflater(this);menuInflater.inflate(R.menu.context_menu, menu);super.onCreateContextMenu(menu, v, menuInfo);}@Overridepublic boolean onContextItemSelected(MenuItem item) {switch (item.getItemId()) {case R.id.basketball:Toast.makeText(getApplicationContext(), "你选择了篮球", Toast.LENGTH_SHORT).show();break;case R.id.football:Toast.makeText(getApplicationContext(), "你选择了足球", Toast.LENGTH_SHORT).show();break;case R.id.baseball:Toast.makeText(getApplicationContext(), "你选择了棒球", Toast.LENGTH_SHORT).show();break;case R.id.pingpang:Toast.makeText(getApplicationContext(), "你选择了乒乓球", Toast.LENGTH_SHORT).show();ak;case R.id.balloon:Toast.makeText(getApplicationContext(), "你选择了汽球", Toast.LENGTH_SHORT).show();break;}return super.onContextItemSelected(item);}}menu中XML代码:<?xml version="1.0" encoding="utf-8"?><groupandroid:id="@+id/context_menu_item"android:checkableBehavior="none"><itemandroid:id="@+id/basketball"android:title="篮球" /><itemandroid:id="@+id/football"android:title="足球" /><itemandroid:id="@+id/baseball"android:title="棒球" /><itemandroid:id="@+id/pingpang"android:title="乒乓球" /><itemandroid:id="@+id/balloon"android:title="汽球" /></group></menu>实现的效果图:布局文件比较简单,就不在贴出代码了。