第三章 Android高级界面控件(4) QQ群:287966120 Q Q号: 2227351322 倚动软件工厂实验室.

Slides:



Advertisements
Similar presentations
网络应用程序设计 2014 JavaBean. JavaBean 及其属性 JavaBean 就是一种 Java 的组件技术 JavaBean 是 Java 类 JavaBean 通过约定的方法名实现属性功能 简单属性 void setXxx(Type value) Type getXxx() boolean.
Advertisements

第2章  Android应用的界面编程.
项目2 字符格式和段落编排 2017年3月7日6时54分.
第13章 繪圖與多媒體 13-1 顯示圖檔-行動相簿 13-2 音樂播放-音樂播放器 13-3 影片播放-視訊播放器
插入超链接 高邮市第一实验小学 范太国 任务一:设置文本超链接 任务一:设置文字超链接 步骤:1、选定文字并右击,在快捷菜单 中选择“超链接”命令。 2、在弹出的对话框中选择左侧“链接到:”中的“本文档中的位置(A)”项,在“请选择文档中的位置(C):”中选择需要链接的幻灯片,单击“确定”按钮。
實驗五:多媒體播放器選單介面.
第四章 Android事件处理机制 QQ群: Q Q号: 倚动软件工厂实验室.
Part 2 開發Android應用程式的流程
ArrayAdapter & Spinner
第2章 Android界面设计基础 QQ号: QQ群: (Android编程-清华版)
Chapter 4 手機控制項應用.
實驗四:單位轉換程式.
Chapter 13 Android 實戰演練.
Android + JUnit 單元測試 建國科技大學資管系 饒瑞佶 2012/8/19V4.
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
實驗十三:顯示目前經緯度位置.
其他視窗.
Ch06 再談選單元件 物件導向系統實務.
Android資料庫處理 Android智慧型手機程式設計 程式設計與應用班 建國科技大學 資管系 饒瑞佶 2012/4 V1
第8章 Android内容提供者(ContentProvider)应用
Chapter 6 Advanced UI Design.
Android智慧型手機程式設計實務應用班
Android介面設計 Android智慧型手機程式設計 建國科技大學 資管系 饒瑞佶 2012/4 V1 2012/8 V2
CH10 對話框與分頁.
Chapter 6 進階UI設計.
第八章 菜单设计 §8.1 Visual FoxPro 系统菜单 §8.2 为自己的程序添加菜单 §8.3 创建快捷菜单.
程式設計實作.
CH7 佈局、按鈕與文字編輯元件.
Android + Service 建國科技大學 資管系 饒瑞佶.
Android 基礎.
6.4 Notification 通知栏.
2018/12/3 面向对象与多线程综合实验-网络编程 教师:段鹏飞.
實驗十四:顯示與控制地圖.
走进编程 程序的顺序结构(二).
辅导课程六.
第6章 建立Android使用介面 6-1 介面元件的基礎 6-2 Android的事件處理 6-3 按鈕元件 6-4 文字元件
第五讲 四则运算计算器(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
生活智慧王 樹德科技大學 資訊工程系 指導教授 : 陳毓璋 教授 小組成員: 劉上緯 翁維廷 洪文財.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
實驗十一:待辦事項程式 (儲存在手機上).
主编:钟元生 赵圣鲁.
Android Studio介面設計 建國科技大學資管系 饒瑞佶 2016/3 V1.
SOA – Experiment 2: Query Classification Web Service
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第四讲 客户问卷调查程序 教育部“十二五”职业教育国家规划教材
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
$9 泛型基础.
Chapter 5 Basic UI Design.
Android視窗介面 建國科技大學 資管系 饒瑞佶 2010/10.
進階UI元件:Spinner與接合器 靜宜大學資管系 楊子青
VB与Access数据库的连接.
组件 复选框(Checkbox)可以让用户进行多项选择。复选框有两种状态,分别为“开(on)”和“关(off)”。当用户点中复选框的时候,复选框的状态就会改变。 1、创建复选框 (1)声明复选框。 Checkbox mycheckbox =new Checkbox (); (2)添加复选框。将复选框组件放置到容器中。
第4章 Excel电子表格制作软件 4.4 函数(一).
iSIGHT 基本培训 使用 Excel的栅栏问题
Android視窗介面 建國科技大學 資管系 饒瑞佶 2010/10.
Chapter 18 使用GRASP的对象设计示例.
Review 1~3.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
辅导课程十五.
第二章 Java基本语法 讲师:复凡.
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
RecyclerView and CardView
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
基本组件 本讲大纲: 支持网站: 1、文本框(TextView)与编辑框(EditText)
第8章 创建与使用图块 将一个或多个单一的实体对象整合为一个对象,这个对象就是图块。图块中的各实体可以具有各自的图层、线性、颜色等特征。在应用时,图块作为一个独立的、完整的对象进行操作,可以根据需要按一定比例和角度将图块插入到需要的位置。 2019/6/30.
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
第六讲 酒店客房管理系统(二) 教育部“十二五”职业教育国家规划教材
進階UI元件:Spinner與接合器 靜宜大學資管系 楊子青
Presentation transcript:

第三章 Android高级界面控件(4) QQ群:287966120 Q Q号: 2227351322 倚动软件工厂实验室

本讲主要内容 图片控件 列表控件 对话框 菜单

主要内容

3.2.4 ExpandableListView ExpandableListView扩展下拉列表 SimpleExpandableListAdapter的参数: 参数1:上下文对象Context; 参数2:一级列表集合,即省份的集合; 参数3:一级列表对应的布局文件; 参数4:就是map中的key,指定要显示的信息; 参数5:与参数4对应,指定显示信息的控件ID; 参数6:二级列表集合,即城市的集合; 参数7:二级列表对应的布局文件; 参数8:就是map中的key,指定要显示的信息; 参数9:与参数8对应,指定显示信息的控件ID; 注意:SimpleExpandableListAdapter可以实现扩展下拉列表的功能,但是不能显示图片 。

3.2.4 ExpandableListView ExpandableListView扩展下拉列表 通过自定义Adapter实现,关 组的图标groupImgs[] 组的图标groupImgs[] 组的图标groupImgs[] 组的图标groupImgs[] 组的文字type[] 组的文字type[] 组的文字type[] 组的文字type[] ExpandableListView扩展下拉列表 通过自定义Adapter实现,关 键是要重写以下两个方法。 每组下的文字info[][] 每组下的图标imgIds[][] getGroupView() getChildView() 每组下的文字info[][] 每组下的文字info[][] 每组下的文字info[][] 每组下的文字info[][] 每组下的文字info[][] 每组下的图标imgIds[][] 每组下的图标imgIds[][]

3.2.4 ExpandableListView 1.在布局文件中添加一个扩展下拉列表,代码如下。 ..\res\layout\activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ExpandableListView android:id="@+id/myExpandable" android:layout_height="fill_parent"/> </LinearLayout> →为ExpandableListView命名 →高度为填充父容器 →宽度为填充父容器

3.2.4 ExpandableListView 2.在MainActivity代码中,定义扩展下拉列表所需要的资源。再根据findViewById()方法获取该ExpandableListView。 public class MainActivity extends Activity { String[] type = new String[] { "我的好友", "大学同学", "亲戚朋友" }; String[][] info = new String[][] { { "张三", "张四", "张五" }, { "李四", "李斯" }, { "王五", "王六", "王二", "王三" } }; int[] groupImgs = new int[] { R.drawable.g1, R.drawable.g2, R.drawable.g3}; int[][] imgIds = new int[][] { { R.drawable.a1, R.drawable.a2, R.drawable.a3 }, { R.drawable.a4, R.drawable.a5, R.drawable.a6 }, { R.drawable.a7, R.drawable.a8, R.drawable.a9, R.drawable.a10 } }; private ExpandableListView myExpandable; →定义组显示的文字 →定义每一组的内容,注意:每一组项的个数可以不一致 →组的图标 →每一项的图标

3.2.4 ExpandableListView 以下放在Activity 下面的onCreate()方法中 ExpandableListAdapter myAdapter = new BaseExpandableListAdapter() { public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } public boolean hasStableIds() { return false; private TextView getTextView() { AbsListView.LayoutParams lp = new AbsListView.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); TextView textView = new TextView(MainActivity.this); textView.setLayoutParams(lp); textView.setGravity(Gravity.CENTER_VERTICAL); textView.setTextSize(20); textView.setPadding(30, 0, 0, 0); textView.setTextColor(Color.BLACK); return textView; →子项是否可以选择 →自己定义的一个获取TextView的方法 →设置宽度和高度 →文字水平居中 →设置文字大小为20sp →设置左边距为30pt →设置本文颜色 →获取自定义的文本控件

3.2.4 ExpandableListView 设置一个组的图源+文字,使之成为一个线性布局 public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { LinearLayout layout = new LinearLayout(MainActivity.this); layout.setOrientation(LinearLayout.HORIZONTAL); layout.setGravity(Gravity.CENTER_VERTICAL); ImageView groupImg=new ImageView(MainActivity.this); groupImg.setImageResource(groupImgs[groupPosition]); layout.addView(groupImg); TextView textView = getTextView(); textView.setText(getGroup(groupPosition).toString()); layout.addView(textView); return layout; } →线性布局 →设置线性布局方向:图→文字 →设置垂直居中 →创建一个ImageView →设置ImageView的图片 →在线性布局中添加图片 →得到一个TextView →设置TextView显示内容 调用后面的getGroup(int groupPosition)方法,返回存储作为组类型名的一个字符串type[groupPosition] →在布局中添加TextView →返回整个线性布局控件

3.2.4 ExpandableListView public long getGroupId(int groupPosition) { return groupPosition; } public int getGroupCount() { return type.length; public Object getGroup(int groupPosition) { return type[groupPosition]; public int getChildrenCount(int groupPosition) { return info[groupPosition].length; →获取组的Id →获取组的个数 →获取自定组对象 →获取指定组的项数

3.2.4 ExpandableListView 设置一个子项的图源+文字,使之成为一个线性布局 public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { LinearLayout layout = new LinearLayout(MainActivity.this); layout.setOrientation(LinearLayout.HORIZONTAL); layout.setPadding(20, 0, 0, 0); ImageView itemImage = new ImageView(MainActivity.this); itemImage.setPadding(20, 0, 0, 0); itemImage.setImageResource(imgIds[groupPosition][childPosition]); layout.addView(itemImage); TextView textView = getTextView(); textView.setText(getChild(groupPosition, childPosition).toString()); layout.addView(textView); return layout; } →线性布局 →设置线性布局方向 →设置线性布局的左边距 →创建图片视图 →设置图片的左边距 →在线性布局中添加图片 →获取文本显示框 调用后面的getChild(int groupPosition, int childPosition)方法,返回存储作为子项类型名的一个字符串info[groupPosition][childPosition] →在布局中添加文本控件 →返回线性布局

3.2.4 ExpandableListView public long getChildId(int groupPosition, int childPosition) { return childPosition; } public Object getChild(int groupPosition, int childPosition) { return info[groupPosition][childPosition]; →获取子项的Id →获取指定组中指定序号的项 3.最后,将我们的扩展下拉列表与我们的适配器进行关联。 myExpandable=(ExpandableListView)findViewById(R.id.myExpandable); myExpandable.setAdapter(myAdapter);

3.3 对话框 对话框是漂浮在Activity之上的小窗口,此时,Activity会失去焦点,而对话框会获取焦点。对话框通常用于通知,它会临时打断用户,执行一些与应用程序相关的小任务,例如任务执行进度或登录提示等。(是object类,不是view类) Android中,主要的对话框有以下四种: AlertDialog:警示框,功能最丰富、应用最广的对话框,该对话框可以包含0~3个按钮,或者是包含复选框或单选按钮的列表。 ProgressDialog:进度对话框,主要用于显示进度信息,以进度环或进度条的形式显示任务执行进度; DatePickerDialog:日期选择对话框,允许用户选择日期; TimePickerDialog:时间选择对话框,允许用户选择时间。

3.3.1 对话框简介 AlertDialog是Dialog的子类,它能创建大部分用户交互的对话框,也是系统推荐的对话框类型。 简单提示对话框 单选列表对话框 多选列表对话框

3.3.1 对话框简介 自定义输入对话框框 自定义列表对话框

3.3.1 对话框简介 如果要想实例化AlertDialog类往往需依靠其内部类:AlertDialog.Builder完成。使用AlertDialog创建对话框大致按如下步骤进行: 第1步:创建AlertDialog.Builder对象,该对象是AlertDialog的创建器。 第2步:调用AlertDialog.Builder方法为对话框设置图标、标题、内容等。 第3步:调用AlertDialog.Builder的create()方法创建AlertDialog对话框 第4步:调用AlertDialog的show()方法显示对话框。

3.3.1 对话框简介 Builder内部类的主要方法如下: 方法名 作用 public Builder setTitle 设置对话框标题 public Builder setMessage 设置对话框内容 public Builder setIcon 设置对话框图标 public Builder setPositiveButton 添加肯定按钮(Yes) public Builder setNegativeButton 添加否定按钮(No) public Builder setNeutralButton 添加普通按钮 注意:很多方法的返回类型都是Builder类型,Builder对象每调用一个方法就是为对话框添加一些内容,是对对话框的不断完善,调用方法就是构造对话框的过程,每次返回的都是已构建好的对话框。

3.3.2 创建对话框 当程序中存在两个名称相同,包不同的类或接口时,应该怎么办? 程序中存在两种单击事件,一个是普通按钮的单击事件、一个是对话框中按钮的单击事件,两种事件的监听器是不一样的,一个是View.OnClickListener接口,一个是DialogInterface.OnClickListener接口,但它们的监听器接口名却都是OnclickListener,导入包时,只能导入一个接口,另一个必须用完整的包名+接口名才能引用,否则程序会认为引用的是导入的那个接口,从而导致编译不通过。

3.3.2 创建对话框 下面以一个简单的例子讲解AlertDialog的创建过程。单击退出按钮时,弹出提示对话框,提示用户是否确定要退出,单击按钮后,使用Toast显示相应的信息。 具体实现过程如下,首先获取按钮控件,创建 Builder对象。 simpleDialog = (Button) findViewById(R.id.simpleDialog); final Builder builder = new AlertDialog.Builder(this);

3.3.2 创建对话框 然后在按钮单击事件中,通过Builder对象来设置对话框的一些属性,包括对话框的内容,按钮等,并通过Builder对象创建和显示对话框。 simpleDialog.setOnClickListener(new OnClickListener() { public void onClick(View v) { builder.setMessage("Are you sure you want to exit?"); builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "单击了确定!", 1000).show(); } }); builder.setNegativeButton("No", public void onClick(DialogInterface dialog,int which) { Toast.makeText(MainActivity.this, "单击了取消!",1000).show(); builder.show(); →为按钮添加单击事件 →对话框内容 →添加yes按钮 →单击事件处理 →消息提示 →添加no按钮 →单击事件处理 →消息提示 →builder.create()

3.3.2 创建对话框 对话框中包含三种类型的按钮,能否重复添加?按钮有什么作用? 在AlertDialog对话框中,每种类型的按钮最多只有一个,也就是说,在AlertDialog对话框中不可能同时存在两个以上的“PositiveButton”,后面添加的会覆盖前面的。因此,对话框中按钮的数量最多为三个:肯定、否定、中性。这些名字和实际功能并没有联系,只是帮助记忆每个按钮主要做什么事。 如何解决单击Back建退出对话框的问题? 只需在构建时,添加builder.setCancelable(false)即可

3.3.2 创建对话框 AlertDialog对话框除了可以提示信息外,还可以让用户进行选择和输入。下面介绍如何创建带有单选按钮列表的对话框。在上述程序界面中添加一个选择状态的按钮,运行效果如下图。 statusText = (TextView) findViewById(R.id.statusInfo); →获取选择状态的按钮

3.3.2 创建对话框 statusText = (TextView) findViewById(R.id.statusInfo); statusText = (TextView) findViewById(R.id.stastusText); →获取选择状态按钮 status.setOnClickListener(new OnClickListener() { public void onClick(View v) { final String[] items = new String[] { "在线", "隐身", "离开", "忙碌","离线", "其他" }; Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle("请选择你的状态"); builder.setIcon(R.drawable.ic_launcher); builder.setCancelable(false); builder.setSingleChoiceItems(items, 1, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { if (which == (items.length - 1)) { Builder myBuilder = new Builder( MainActivity.this); final EditText myInput = new EditText( myBuilder.setTitle("请输入你的状态"); myBuilder.setIcon(R.drawable.ic_launcher); myBuilder.setView(myInput); myBuilder.setPositiveButton("确定",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int which) { statusText.setText("你当前的状态是:"+ myInput.getText().toString()); } }); →为按钮添加单击事件 →列表项 →创建Builder对象 →设置对话框标题 →设置对话框图标 →设置对话框不能取消 →设置单选列表,包括列表项,默认选中项,单击事件处理 statusText = (TextView) findViewById(R.id.statusInfo); →添加确定按钮

3.3.2 创建对话框 创建Builder对象时,为什么有时传的是MainActivity.this, 而有时传的是this? 在Java中this表示当前类的对象,通常有两种用法: 1、代表当前类的对象,使用this.***; 2、引用当前类的其他构造方法,通常使用this(***)。 如果Builder对象的创建是放在MainActivity的onCreate()方法中,此时this代表的就是MainActivity对象。 如果Builder对象的创建是放在View.OnClickListener的匿名内部类中,this代表的是该匿名内部类对象。 而Builder对象的创建需要传递一个Context类型的参数,MainActivity是Context类的子类,可以作为参数进行传递,在内部类中需要使用外部类的对象时,需使用外部类的类名.this。