已阅读5页,还剩86页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ANDROID 用户界面 英蓓特培训中心 2012. 07 主要内容 n用户界面基础 n用户界面初探 n用户界面布局 n用户界面控件 n用户界面菜单 用户界面基础 内容一 用户界面 n界面如同人的面孔,具有吸引用户的直接优势 用户界面 n用户界面(User Interface,UI)是系统和用户之间进 行信息交换的媒介,实现信息的内部形式与人类可以接 受形式之间的转换 n在计算机出现早期,批处理界面(1945-1968)和命令行界面 (1969-1983)得到广泛的使用 n目前,流行图形用户界面(Graphical User Interface,GUI) ,采用图形方式与用户进行交互的界面 n未来的用户界面将更多的运用虚拟现实技术,使用户能够摆脱 键盘与鼠标的交互方式,而通过动作、语言,甚至是脑电波来 控制计算机 手机用户界面 n设计手机用户界面应解决的问题: n需要界面设计与程序逻辑完全分离,这样不仅有利于他们的并 行开发,而且在后期修改界面时,也不用再次修改程序的逻辑 代码 n根据不同型号手机的屏幕解析度、尺寸和纵横比各不相同,自 动调整界面上部分控件的位置和尺寸,避免因为屏幕信息的变 化而出现显示错误 n能够合理利用较小的屏幕显示空间,构造出符合人机交互规律 的用户界面,避免出现凌乱、拥挤的用户界面 nAndroid已经解决了前两个问题: n使用XML文件(布局文件)描述用户界面;资源资源文件独立 保存在资源文件夹中; n对界用户面描述非常灵活,允许不明确定义界面元素的位置和 尺寸,仅声明界面元素的相对位置和粗略尺寸 手机用户界面 n设计手机用户界面应特别注意的问题: n手机的显示区域小,不能有太丰富的展示效果,因此要求设计 精简而不失表达能力。 n手机的操作主要依赖拇指,所以交互过程不能设计得太复杂, 交互步骤不能太多,尽量设计多点快捷方式。 n不同型号的手机支持的图片格式、声音格式、动画格式不一样 ,需要选择尽可能通用的格式,或者针对不同的型号进行配置 选择。 n不同型号的手机屏幕大小不一致,设置形状不一致,因此需要 考虑图片的自适应问题和界面元素的布局问题。 ANDROID用户界面 nAndroid用户界面框架采 用MVC(Model-View- Controller)模型 n提供了处理用户输入的控 制器(Controller) n显示用户界面和图像的视 图(View),以及保存数 据和代码的模型(Model ) ANDROID用户界面 nMVC模型 nMVC模型中的控制器能够接受并响应程序的外部动作,如按键 动作或触摸屏动作等 n控制器使用队列处理外部动作,每个外部动作作为一个独立的 事件被加入队列中,然后Android用户界面框架按照“先进先出” 的规则从队列中获取事件,并将这个事件分配给所对应的事件 处理函数 事件1 事件2 事件3 事件N 消息队列 View Controller Model ANDROID用户界面框架 nAndroid用户界面框架采用视图树(View Tree)模型 nAndroid用户界面框架中的界面元素以一种树型结构组织在一 起,称为视图树 nAndroid系统会依据视图树的结构从上至下绘制每一个界面元 素。每个元素负责对自身的绘制,如果元素包含子元素,该 元素会通知其下所有子元素进行绘制 ANDROID视图树 n视图树 n视图树由View和ViewGroup构成 nView是界面的最基本的可视单元,存储了屏幕上特定矩形区域 内所显示内容的数据结构,并能够实现所占据区域的界面绘制 、焦点变化、用户输入和界面事件处理等功能 nView也是一个重要的基类,所有在界面上的可见元素都是View 的子类 nViewGroup是一种能够承载含多个View的显示单元 nViewGroup功能:一个是承载界面布局;另一个是承载具有原 子特性的重构模块 单线程用户界面 n单线程用户界面 n在单线程用户界面中,控制器从队列中获取事件和视图在屏幕 上绘制用户界面,使用的都是同一个线程 n优点:处理函数具有顺序性,能够降低应用程序的复杂程度, 同时也能减低开发的难度 n缺点:如果事件处理函数过于复杂,可能会导致用户界面失去 响应 用户界面初探 内容二 ANDROID应用程序模型 ANDROID 应用程序 资源 源代码 Activity 控件布局(Layout ) 图片(Drawable ) 值(Values) R.java Activity 如何实现ANDROID界面 nAndroid界面布局Layout定义了界面中所有的元素、 结构和相互关系: n使用XML文件描述界面布局 n在程序运行时动态添加或修改界面布局 n布局对象在程序中的调用: nsetContentView() 从布局文件加载布局及控件 nfindViewById() 从资源中找到控件 布局Activity 加载 setContentView 使用 findViewByID ANDROID XML布局文件 n使用XML文件声明界面布局的特点 n将程序的表现层和控制层分离 n在后期修改用户界面时,无需更改程序的源代码 n用户还能够通过可视化工具直接看到所设计的用户界面, 有利于加快界面设计的过程,并且为界面设计与开发带来 极大的便利性 简单的XML布局文件 线性布局 布局方向 控件 命名空间 控件资源ID 控件大小 控件显示内容 nandroid:id属性:声明了控件对象的ID,这个ID主要 用于在代码中引用这个控件对象 n“+id/button1”表示所设置的ID值 n表示后面的字符串是ID资源 n加号(+)表示需要建立新资源名称,并添加到R.java文件 中 n斜杠后面的字符串(button1)表示新资源的名称 n如果资源不是新添加的,或属于Android框架的ID资源,则 不需要使用加号(+),但必须添加Android包的命名空间 ,例如android:id=“android:id/empty“ 界面对象的常规属性 android:id=“+id/button1“ nandroid:layout_width属性:用来设置控件对象的宽 度, fill_parent表示控件对象的宽度将等于父控件的 宽度 nandroid:layout_height属性:用来设置控件对象的高 度, wrap_content表示控件对象的宽度只要能够包 含所显示的字符串即可 界面对象的常规属性 android:layout_width=“fill_parent“ android:layout_height=“wrap_content“ 界面对象的常规属性 nAndroid中使用的单位(在布局文件中使用ddxx) npx:表示屏幕实际的像素数。例如,320*480的屏幕在横向 有320个象素,在纵向有480个象素。 nin:表示英寸,是屏幕的物理尺寸。每英寸等于2.54厘米, 形容手机屏幕大小用的是屏幕的对角线长度。 nmm:表示毫米,是屏幕的物理尺寸。 npt:表示一个点,是屏幕的物理尺寸, 大小为1英寸的1/72。 ndp(密度独立像素):也作dip, 是一种基于屏幕密度的抽象 单位。基本密度是160dpi,如果屏幕密度提高,则dp对应 的实际px数也会相应的提高。 nsp(scale独立像素):用于字体的一种基于屏幕密度的抽 象单位。 android:layout_width=“120dp“ 界面对象的常规属性 nandroid:text属性:用来设置控件对象上显示的文字 内容 android:text=“Button“ 引入资源 n引入资源: n将download.png文件拷贝 到/res/drawable文件夹下 n在/res目录上选择Refresh n新添加的文件将显示在 /res/drawable文件夹下 nR.java文件内容也得到了更 新 n否则提示无法找到资源的错 误 程序加载XML资源 n通过调用方法:setContentView() 可以实现对 Layout布局资源的调用: public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); 程序创建对象及引用 n通过调用方法:findViewById() 可以实现对控件对象 的引用: Button myButton = (Button) findViewById(R.id.button1); myButton.setText(“test“); 可视化编辑器 作业:在界面中添加一个按钮,并且在程序中调用该按钮资源,显示文字“test” 用户界面布局 内容三 ANDROID界面布局 nAndroid界面布局Layout定义了界面中所有的元素、 结构和相互关系。 常用的布局对象 nAndroid操作系统提供下列5种窗体布局: u线性布局(Linear Layout) u框架布局(Frame Layout) u表格布局(Table Layout) u相对布局(Relative Layout) u绝对布局(Absolute Layout) 线性布局 - Linear Layout n线性布局LinearLayout n在线性布局中,所有的子元素都按照垂直或水平的顺序在界 面上排列 n如果垂直排列,则每行仅包含一个界面元素 n如果水平排列,则每列仅包含一个界面元素 Android:orientation=“vertical”或Android:orientation=“horizontal” 线性布局实例 线性布局控件常用属性 属性功能 android:id 为控件指定相应的ID android:text 指定控件当中显示的文字,需要注意的是,这里尽量使 用strings.xml文件当中的字符串 android:gravity指定控件的基本位置,比如说居中,居右等位置 android:textSize指定控件当中字体的大小 android:background指定该控件所使用的背景色,RGB命名法 android:width指定控件的宽度 android:height 指定控件的高度 android:padding指定控件的内边距,也就是说控件当中的内容 android:sigleLine 如果设置为真的话,则将控件的内容在同一行当中进 行显示,屏幕宽度不够时,将显示省略号 android:layout_weight控件的权重,以父控件为整体单位来计算 框架布局 - Frame Layout n框架布局FrameLayout n框架布局(FrameLayout)是最简单的界面布局,是用来存 放一个元素的空白空间,且子元素的位置是不能够指定的 ,只能够放置在空白空间的左上角 n如果有多个子元素,后放置的子元素将遮挡先放置的子元 素 n使用Android SDK中提供的层级观察器(Hierarchy Viewer )进一步分析界面布局, 能够对用户界面进行分析和调试, 并以图形化的方式展示树形结构的界面布局 框架布局 - Frame Layout n在层级观察器中获得示例界面布局的树形结构图 框架布局实例 表格布局 - Table Layout n表格布局TableLayout n表格布局(TableLayout)也是一种常用的界面布局,它将 屏幕划分网格,通过指定行和列可以将界面元素添加的网 格中 n网格的边界对用户是不可见的 n表格布局还支持嵌套,可以将另一个表格布局放置在前一 个表格布局的网格中,也可以在表格布局中添加其他界面 布局,例如线性布局、相对布局等等 表格布局 - Table Layout n表格布局TableLayout TextViewEditTextRow 1 ButtonButtonRow 2 表格布局 表格布局示意图 表格布局效果图 表格布局实例 表格布局常用属性 属性功能 android:stretchColumns 指定伸展的列(自零始),使在其所在的行中作 最大程度伸展 android:android:shrinkColumns 指定收缩的列(自零始),使在其所在的行中作 最大程度收缩 android:collapseColumns 指定要隐藏的列(自零始),使在其所在的列不 可见 相对布局 - Relative Layout n相对布局RelativeLayout n相对布局(RelativeLayout)是一种非常灵活的布局方式, 能够通过指定界面元素与其他元素的相对位置关系,确定 界面中所有元素的布局位置 n特点:能够最大程度保证在各种屏幕类型的手机上正确显 示界面布局 相对布局实例 相对布局常用属性 属性功能 layout_above/below将该控件的底部/顶部至于给定ID的控件之上 android:layout_toLeft(Right)Of 将该控件的右(左)边缘和给定ID的控件的左边 缘对齐 android:layout_alignBaseline (Top, Bottom, Left, Right) 该控件的baseline(上、下、左、右)和给定ID的 控件的baseline(上、下、左、右)对齐 android:alignParentBottom (Left, Right, Top, Bottom) 如果该值为 true,则将该控件的底部(左、右、 上、下)和父控件的底部(左、右、上、下)对 齐 android:layout_centerHorizontal (Vertical) 如果值为真,该控件将被至于水平(垂直)方向 的中央 android:layout_centerInParent 如果值为真,该控件将被至于父控件水平方向 和垂直方向的中央 绝对布局 - Absolute Layout n绝对布局AbsoluteLayout n绝对布局(AbsoluteLayout)能通过指定界面元素的坐标位 置,来确定用户界面的整体布局 n绝对布局是一种不推荐使用的界面布局,因为通过X轴和Y 轴确定界面元素位置后,Android系统不能够根据不同屏幕 对界面元素的位置进行调整,降低了界面布局对不同类型 和尺寸屏幕的适应能力 布局的嵌套 n布局的嵌套是指相同或者不同类型的布局之间可以嵌 套使用,其目的是为了利用不同布局的特性,方便构 建我们想要得到的图案 布局嵌套实例 用户界面控件 内容四 ANDROID用户界面控件 nAndroid系统的界面控件有两种: n系统控件:是Android系统提供给用户已经封装的界面控件 。提供在应用程序开发过程中常见功能控件。系统控件更 有利于帮助用户进行快速开发,同时能够使Android系统中 应用程序的界面保持一致性 n定制控件:是用户独立开发的控件,或通过继承并修改系 统控件后所产生的新控件。能够为用户提供特殊的功能或 与众不同的显示需求方式 n常见的系统控件包括TextView、EditText、Button、 ImageButton、Checkbox、RadioButton、Spinner 、Progress、ListView和TabHost、Dialog、Toast、 Notification等 ANDROID控件类型分类 n常用控件:TextView、EditText、Button n选择控件:CheckBox、RadioButton、Spinner n进度条控件:Progress n对话框控件:Dialog n消息提示控件:Toast 常用控件:TextView、EditText nTextView和EditText nTextView是一种用于显示字符串的控件 nEditText则是用来输入和编辑字符串的控件 TextView EditText 程序名 EditText实际上是一个具有编辑功能的TextView 控件布局实例 常用函数: setText(); getText(); 常用控件:Button、ImageButton nButton和ImageButton nButton是一种按钮控件,用户能够在该控件上点击,随后引 发相应的事件处理函数 nImageButton用以实现能够显示图像功能的控件按钮 控件布局实例 也可以通过程序实现ImageButton上图片的显示: myImageButton.setImageResource(R.drawable.download); 按钮控件的监听 n按钮响应点击事件:添加点击事件的监听器 final Button myButton = (Button) findViewById(R.id.button1); myButton.setOnClickListener(new View.OnClickListener() public void onClick(View v) / TODO Auto-generated method stub myButton.setText(“我按了Button一下“); ); 监听器 消息响应函数 按钮控件的监听 final Button myButton = (Button) findViewById(R.id.button1); final ImageButton myImageButton = (ImageButton) findViewById(R.id.imagebutton1); View.OnClickListener buttonListener = new View.OnClickListener() public void onClick(View v) / TODO Auto-generated method stub switch (v.getId() case R.id.button1: myButton.setText(“我按了Button一下“); return; case R.id.imagebutton1: myButton.setText(“我按了ImageButton一下“); return; ; myButton.setOnClickListener(buttonListener); myImageButton.setOnClickListener(buttonListener); 选择控件:CheckBox、RadioButton nCheckBox和RadioButton nCheckBox:多选控件 nRadioButton:单选控件 nRadioGroup是RadioButton的承载体,程序运行时不可见, 在每个RadioGroup中,用户仅能够选择其中一个 RadioButton CheckBox控件实例 final CheckBox myCheckBox = (CheckBox) findViewById(R.id.checkbox01); myCheckBox.setText(“我的状态是:“ + myCheckBox.isChecked(); myCheckBox.setOnClickListener(new View.OnClickListener() public void onClick(View v) / TODO Auto-generated method stub myCheckBox.setText(“我的状态是:“ + myCheckBox.isChecked(); ); RadioButton控件实例 RadioButton控件实例 final TextView myTextView = (TextView) findViewById(R.id.TextView01); final RadioGroup myRadioGroup01 = (RadioGroup) findViewById(R.id.RadioGroup01); final RadioButton myRadioButton = (RadioButton) findViewById(myRadioGroup01 .getCheckedRadioButtonId(); myTextView.setText(myRadioButton.getText().toString(); myRadioGroup01.setOnCheckedChangeListener(new OnCheckedChangeListener() public void onCheckedChanged(RadioGroup group, int checkedId) / TODO Auto-generated method stub myTextView.setText(RadioButton) findViewById(checkedId).getText().toString(); ); 选择控件:Spinner nSpinner nSpinner是一种能够从多个选项中 选一选项的控件,类似于桌面程 序的组合框(ComboBox),但 没有组合框的下拉菜单,而是使 用浮动菜单为用户提供选择 Spinner控件实例 Spinner控件实例 final Spinner mySpinner = (Spinner) findViewById(R.id.Spinner01); List list = new ArrayList(); list.add(“Spinner 1“); list.add(“Spinner 2“); list.add(“Spinner 3“); ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, list); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); mySpinner.setAdapter(adapter); 进度条控件:Progress nProgress nProgress可以用于某些操作的可 视化指示器。显示给用户一个代 表操作进行了多少的进度条。用 户可以随着进度向前推进改变进 度条的量。 Progress控件实例 Progress控件实例 private boolean state = false; private static int count = 0; final Button myButton1 = (Button) findViewById(R.id.button1); final Button myButton2 = (Button) findViewById(R.id.button2); final ProgressBar myProgressBar1 = (ProgressBar) findViewById(R.gressBar1); final ProgressBar myProgressBar2 = (ProgressBar) findViewById(R.gressBar2); myProgressBar1.setMax(100); myProgressBar2.setVisibility(View.GONE); View.OnClickListener buttonListener = new View.OnClickListener() public void onClick(View v) / TODO Auto-generated method stub switch (v.getId() case R.id.button1: count+; if (count = 100) count = 0; myProgressBar1.setProgress(0); myProgressBar1.setProgress(count); break; case R.id.button2: state = !state; if (state) myButton2.setText(“停止“); myProgressBar2.setVisibility(View.VISIBLE); else myButton2.setText(“运行“); myProgressBar2.setVisibility(View.GONE); break; ; myButton1.setOnClickListener(buttonListener); myButton2.setOnClickListener(buttonListener); 对话框控件:Dialog nDialog是android开发过程中最常用到的组件之一,通 常是在当前activity前面出现的小窗口。Dialog通常是用 来通知打断用户,执行直接跟应用程序进度相关的短 暂任务(比如进度条或者登录框)。Dialog可分为以下几 种类型: n警告对话框:Alertialog n进度对话框:ProgressDialog n日期选择对话框:DatePickerDialog n时间选择对话框:TimePickerDialog n自定义对话框:从Dialog继承 各种Dialog AlertDialog nAlertDialog是对Dialog的扩展,它有能力构建绝大多 数的对话框用户界面,建议使用这种类型的对话框。 它不需要在XML中定义,用代码生成。 AlertDialog控件实例 myButton1.setOnClickListener(new OnClickListener() public void onClick(View v) / TODO Auto-generated method stub AlertDialog.Builder builder = new AlertDialog.Builder(HelloWorldActivity.this); builder.setMessage(“确认退出吗?“); builder.setTitle(“提示“); builder.setPositiveButton(“确认“, new DialogInterface.OnClickListener() public void onClick(DialogInterface dialog, int which) / TODO Auto-generated method stub HelloWorldActivity.this.finish(); ); builder.setNegativeButton(“取消“, new DialogInterface.OnClickListener() public void onClick(DialogInterface dialog, int which) / TODO Auto-generated method stub dialog.cancel(); ); builder.create().show(); ); 消息提示控件:Toast nToast是在窗口表面弹出的通知消息。它仅仅是填充 消息需要的空间大小,用户当前的activity保留可见性 和可交互性。通知会自动的褪掉,它不会接受用户交 互事件。 Toast控件实例 myButton1.setOnClickListener(new OnClickListener() public void onClick(View v) / TODO Auto-generated method stub Context context = getApplicationContext(); CharSequence text = “Hello Toast!“; int duration = Toast.LENGTH_SHORT; Toast toast = Toast.makeText(context, text, duration); / toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0); toast.show(); ); 用户界面菜单 内容五 菜单 n菜单是应用程序中非常重要的组成部分,能够在不占 用界面空间的前提下,为应用程序提供了统一的功能 和设置界面,并为程序开发人员提供了易于使用的编 程接口 nAndroid系统支持三种菜单 n选项菜单(Menu类) n子菜单(SubMenu类) n快捷菜单(ContextMenu类) 菜单 n选项菜单 n选项菜单是一种经常被使用的Android系统菜单 n打开方式:通过“菜单键”(MENU key)打开 n选项菜单分类 n图标菜单(Icon Menu) n扩展菜单(Expanded Menu) 菜单 n图标菜单 n图标菜单能够同时显示文字和图标的菜单,最多 支持6个子项 n图标菜单不支持单选框和复选框 菜单 n扩展菜单 n扩展菜单是在图标菜 单子项多于6个时才出 现,通过点击图标菜 单最后的子项“More”才 能打开 n扩展菜单是垂直的列 表型菜单 不能够显示图标不能够显示图标 支持单选框和复选框支持单选框和复选框 菜单 n重要函数 函数功能 Activity:onCreateOptionMenu() 初始化菜单子项的相关内容 返回值为true,显示菜单;返回值为false, 不显示 Activity: onPrepareOptionsMenu() 动态的添加、删除菜单子项,或修改菜单 的标题、图标和可见性等内容 返回值为true,显示菜单;返回值为false, 不显示 Activity: onOptionsItemSelected()菜单选择 事件,且该函数在每次点击菜单 子项时都会被调用 Menu:add()添加菜单项,返回菜单项(MenuItem) MenuItem:setIcon()添加菜单项图标 MenuItem:setShortcut ()添加菜单项快捷键 菜单 n选项菜单使用 n重载Activity的onCreateOptionMenu()函数,才能 够在Android应用程序中使用选项菜单 n初次使用选项菜单时,会调用 onCreateOptionMenu()函数,用来初始化菜单子 项的相关内容 设置菜单子项自身的子项的ID和组ID 菜单子项显示的文字和图片等 选项菜单 n选项菜单 final static int MENU_DOWNLOAD = Menu.FIRST; final static int MENU_UPLOAD = Menu.FIRST+1; Override public boolean onCreateOptionsMenu(Menu menu) menu.add(0,MENU_DOWNLOAD,0,“下载设置“); menu.add(0,MENU_UPLOAD,1,“上传设置“); return true; Menu.FIRST(整数类型,值为1)定义第一个菜单子项,以后 的菜单子项仅需在Menu.FIRST增加相应的数值即可 第7行代码是onCreateOptionsMenu()函数返回值,函数的返回 值类型为布尔型 返回true将显示在函数中设置的菜单,否则不能够显示菜单 选项菜单 nMenu:add() n添加菜单子项 nadd()函数的语法 groupId:组ID,用以批量的对菜单子项进行处理和排序 itemId:子项ID,是每一个菜单子项的唯一标识,通过子项ID 使应用程序能够定位到用户所选择的菜单子项 order:定义菜单子项在选项菜单中的排列顺序 title:菜单子项所显示的标题 MenuItem android.view.Menu.add(int groupId, int itemId, int order, CharSequence title) 选项菜单 n添加菜单子项的图标和快捷键: nsetIcon()函数 nsetShortcut()函数 MENU_DOWNLOAD菜单设置图标和快捷键的代码 第2行代码中使用了新的图像资源,用户将需要使用的图像文件 拷贝到/res/drawable目录下 setShortcut()函数第一个参数是为数字键盘设定的快捷键 setShortcut()函数第二个参数是为全键盘设定的快捷键,且不 区分字母的大小写 menu.add(0,MENU_DOWNLOAD,0,“下载设置“) .setIcon(R.drawable.download) .setShortcut(0,d); 选项菜单 nActivity: onPrepareOptionsMenu() n动态的添加、删除菜单子项,或修改菜单的标题 、图标和可见性等内容 nonPrepareOptionsMenu()函数的返回值的含义与 onCreateOptionsMenu()函数相同 返回true则显示菜单 返回false则不显示菜单 选项菜单 nActivity: onOptionsItemSelected() n菜单选择事件,且该函数在每次点击菜单子项时 都会被调用 n下面的代码说明了如何通过菜单子项的子项ID执 行不同的操作 public boolean onOptionsItemSelected(MenuItem item) switch (item.getItemId() case MENU_DOWNLOAD: Toast.makeText(getApplicationContext(), “DOWNLOAD“, Toast.LENGTH_SHORT).show(); return true; case MENU_UPLOAD: Toast.makeText(getApplicationContext(), “UPLOAD“, Toast.LENGTH_SHORT).show(); return true; return false; 子菜单 n子菜单(二级菜单) n子菜单是能够显示更加详细 信息的菜单子项 n菜单子项使用了浮动窗体的 显示形式,能够更好适应小 屏幕的显示方式 子菜单 n子菜单重要函数 函数功能 Menu:addSubMenu()添加子菜单,返回SubMenu SubMenu:setHeaderIcon()添加子菜单图标 SubMenu:setHeaderTitle ()添加子菜单标题 SubMenu:add()添加子菜单项 子菜单 n子菜单 nAndroid系统的子菜单使用非常灵活,可以在选项菜单或快 捷菜单中使用子菜单,有利于将相同或相似的菜单子项组 织在一起,便于显示和分类 n子菜单不支持嵌套, 不支持图标(快捷键支持的不好) n子菜单的添加是使用addSubMenu()函数实现 SubMenu uploadMenu = (SubMenu) menu.addSubMenu(0,MENU_UPLOAD,1,“上传设置“) .setIcon(R.drawable.upload); uploadMenu.setHeaderIcon(R.drawable.upload); uploadMenu.setHeaderTitle(“上传参数设置“); uploadMenu.add(0,SUB_MENU_UPLOAD_A,0,“上传参数A“); uploadMenu.add(0,SUB_MENU_UPLOAD_B,0,“上传参数B“); 快捷菜单 n快捷菜单(context menu) n快捷菜单同样采用了动态 窗体的显示方式,与子菜单 的实现方式相同,但两种菜单的启动方式却截然不同 n启动方式:快捷菜单类似于普通桌面程序中的“右键菜 单”,当用户点击界面元素超过2秒后,将启动注册到 该界面元素的快捷菜单 n不支持快捷键和图标(实际支持数字快捷键) n使用方法:与使用选项菜单的方法非常相似,需要重 载onCreateContextMenu()函数和 onContextItemSelected()函数 nonCreateContextMenu()函数主要用来添加快捷菜单 所显示的标题、图标和菜单子项等内容 快捷菜单 n快捷菜单重要函数 函数功能 Activit
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度电气设备安装与维修合同
- 总经理聘请合同模板
- 房地产代理合同范文:委托与代理
- 代理合同:房地产估价委托协议书
- 广告业务经营权转让合同
- 产品责任保险合同专业版解析
- 自动化机器租赁协议
- 2024装修工程转包合同范本
- 年度长期合作协议范例
- 全面购销合同模板珍藏
- 君子自强不息课件
- 2022人教版高二英语新教材选择性必修全四册课文原文及翻译(英汉对照)
- WDZANYJY23低压电力电缆技术规格书
- 抗高血压药物基因检测课件
- 医院管理医院应急调配机制
- (公开课)文言文断句-完整版课件
- 小学生性教育调查问卷
- 医院感染管理质量持续改进反馈表
- 旅游行政管理第二章旅游行政管理体制课件
- 学生岗位实习家长(或法定监护人)知情同意书
- 卫生院关于召开基本公共卫生服务项目培训会的通知
评论
0/150
提交评论