android教程03-AndroidUI设计.ppt

上传人(卖家):hwpkd79526 文档编号:6157813 上传时间:2023-06-04 格式:PPT 页数:70 大小:1.23MB
下载 相关 举报
android教程03-AndroidUI设计.ppt_第1页
第1页 / 共70页
android教程03-AndroidUI设计.ppt_第2页
第2页 / 共70页
android教程03-AndroidUI设计.ppt_第3页
第3页 / 共70页
android教程03-AndroidUI设计.ppt_第4页
第4页 / 共70页
android教程03-AndroidUI设计.ppt_第5页
第5页 / 共70页
点击查看更多>>
资源描述

1、第三章第三章 Android UI设计设计本章学习目标:n了解各种界面控件的使用方法n掌握各种界面布局的特点和使用方法 n掌握按键事件和触摸事件的处理方法n掌握基本控件(button,edittext,textview,checkbox,radiobutton,listview等)n掌握选项菜单、子菜单和快捷菜单的使用方法n掌握对话框的使用,掌握各种布局(线性,相对布局,表格布局等)3.1 用户界面基础n用户界面(User Interface,UI)是系统和用户之间进行信息交换的媒介,实现信息的内部形式与人类可以接受形式之间的转换n设计手机用户界面应解决的问题q需要界面设计与程序逻辑完全分离,

2、这样不仅有利于并行开发,而且在后期修改界面时,也不用再次修改程序的逻辑代码q根据不同型号手机的屏幕解析度、尺寸和纵横比各不相同,自动调整界面上部分控件的位置和尺寸,避免因为屏幕信息的变化而出现显示错误q能够合理利用较小的屏幕显示空间,构造出符合人机交互规律的用户界面,避免出现凌乱、拥挤的用户界面qAndroid已经解决了前两个问题,使用XML文件描述用户界面;资源资源文件独立保存在资源文件夹中;对界用户面描述非常灵活,允许不明确定义界面元素的位置和尺寸,仅声明界面元素的相对位置和粗略尺寸3.1 用户界面基础nAndroid用户界面框架qAndroid用户界面框架采用MVC(Model-View

3、-Controller)模型n控制器(Controller)处理用户输入n视图(View)显示用户界面和图像n模型(Model)保存数据和代码MVC模型MVC模型中的控制器能够接受并响应程序的外部动作,如按键动作或触摸屏动作等控制器使用队列处理外部动作,每个外部动作作为一个对立的事件被加入队列中,然后Android用户界面框架按照“先进先出”的规则从队列中获取事件,并将这个事件分配给所对应的事件处理函数3.1 用户界面基础nAndroid用户界面框架qAndroid用户界面框架采用视图树(View Tree)模型n由View和ViewGroup构成nView是最基本的可视单元q存储了屏幕上特定

4、矩形区域内所显示内容的数据结构q实现所占据区域的界面绘制、焦点变化、用户输入和界面事件处理等q一个重要的基类,所有在界面上的可见元素都是View的子类nViewGroup是一种能够承载含多个View的显示单元q承载界面布局q承载具有原子特性的重构模块3.1 用户界面基础nAndroid用户界面框架qAndroid用户界面框架采用视图树(View Tree)模型nAndroid系统会依据视图树的结构从上至下绘制每一个界面元素n每个元素负责对自身的绘制,如果元素包含子元素,该元素会通知其下所有子元素进行绘制Android UI设计中常用类n在Android程序中,用户界面是用View和ViewGr

5、oup对象来建立的。有许多种View和ViewGroup的,每一种都View的子类。nView是Android平台中最基本的用户界面单元。View类是“小组件”子类的基础,“小组件”提供UI对象的完整实现,例如文本输入框和按钮。ViewGroup类是“布局”子类的基础,“布局”提供不同的布局结构。例如线性布局,标签布局,相关性布局等等。nandroid.view.View 1)为指定的屏幕矩形区域存储布局和内容 2)处理尺寸和布局,绘制,焦点改变,翻屏,按键、手势 3)widget 基类nandroid.view.Viewgroup 1)包含并管理下级系列的 Views 和其他Viewgrou

6、p 2)布局的基类声明式UI设计方法nAndroid使用Layout配置文件通过配置文件中声明控件及定义控件属性的方法来配置一个应用程序UInnnnn编程式UI设计方法n同样可以使用编程的方法动态的生成控件 Button btn=new Button(this);btn.setText(getString(R.string.btntxt);btn.setOnClickListener(this);layout.addView(btn,new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);用户界面事件用户界面事

7、件 n当你在用户界面中加入了一些视图(控件)之后,你可能想要知道如何让它们与用户交互,进而实现你的动作。n定义一个事件侦听器并将其注册至视图。定义一个事件侦听器并将其注册至视图。通常情况下,这是你侦听事件的主要方式。View类包含了一大堆命名类似 OnListener的接口,每个都带有一个叫做On()的回调方法。比如:View.OnClickListener (用以处理视图中的点击),View.OnTouchListener(用以处理视图中的触屏事件),以及View.OnKeyListener (用以处理视图中的设备按键事件)。所以,如果你希望你的视图在它被”点击”(比如选择了一个按钮)的时候

8、获得通知,你就要实现OnClickListener,定义它的onClick()回调方法(在其中进行相应处理),并将它用setOnClickListener()方法注册到视图上。3.2 界面常用控件介绍nAndroid系统的界面控件分为定制控件和系统控件q定制控件是用户独立开发的控件,或通过继承并修改系统控件后所产生的新控件。能够为用户提供特殊的功能或与众不同的显示需求方式q系统控件是Android系统提供给用户已经封装的界面控件。提供在应用程序开发过程中常见功能控件。系统控件更有利于帮助用户进行快速开发,同时能够使Android系统中应用程序的界面保持一致性n常见的系统控件包括TextView

9、、EditText、Button、ImageButton、Checkbox、RadioButton、Spinner、ListView和TabHostTextView和EditTextqTextView是一种用于显示字符串的控件qEditText则是用来输入和编辑字符串的控件nEditText是一个具有编辑功能的TextViewTextView和EditTextq建立一个“TextViewDemo”的程序,包含TextView和EditText两个控件n上方“用户名”部分使用的是TextView,下方的文字输入框使用的是EditTextTextView和EditTextqTextViewDemo

10、在XML文件中的代码1.1.android:text=TextView01 5.5./6.6.android:text=EditText01 10.10./TextView和EditTextq第1行android:id属性声明了TextView的ID,这个ID主要用于在代码中引用这个TextView对象n“+id/TextView01”表示所设置的ID值n表示后面的字符串是ID资源n加号(+)表示需要建立新资源名称,并添加到R.java文件中n斜杠后面的字符串(TextView01)表示新资源的名称n如果资源不是新添加的,或属于Android框架的ID资源,则不需要使用加号(+),但必须添加A

11、ndroid包的命名空间,例如android:id=android:id/emptyTextView和EditTextnTextView和EditTextq第2行的android:layout_width属性用来设置TextView的宽度,wrap_content表示TextView的宽度只要能够包含所显示的字符串即可q第3行的android:layout_height属性用来设置TextView的高度q第4行表示TextView所显示的字符串,在后面将通过代码更改TextView的显示内容q第7行中“fill_parent”表示EditText的宽度将等于父控件的宽度TextView和Edi

12、tTextqTextViewDemo.java文件中代码的修改n第1行代码的findViewById()函数能够通过ID引用界面上的任何控件,只要该控件在XML文件中定义过ID即可n第3行代码的setText()函数用来设置TextView所显示的内容1.TextView textView=(TextView)findViewById(R.id.TextView01);2.EditText editText=(EditText)findViewById(R.id.EditText01);3.textView.setText(用户名:);4.editText.setText(Rajan);But

13、ton和ImageButtonqButton是一种按钮控件,用户能够在该控件上点击,并后引发相应的事件处理函数qImageButton用以实现能够显示图像功能的控件按钮Button和ImageButtonq建立一个“ButtonDemo”的程序,包含Button和ImageButton两个按钮,上方是“Button按钮”,下方是一个ImageButton控件Button和ImageButtonnButton和ImageButtonqButtonDemo在XML文件中的代码n定义Button控件的高度、宽度和内容n定义ImageButton控件的高度和宽度,但是没定义显示的图像,在后面的代码中进

14、行定义1.5.6.9.Button和ImageButtonnButton和ImageButtonq引入资源n将download.png文件拷贝到/res/drawable文件夹下n在/res目录上选择Refreshn新添加的文件将显示在/res/drawable文件夹下nR.java文件内容也得到了更新n否则提示无法找到资源的错误Button和ImageButtonnButton和ImageButtonq更改Button和ImageButton内容n引入android.widget.Button和android.widget.ImageButtonn第1行代码用于引用在XML文件中定义的But

15、ton控件n第2行代码用于引用在XML文件中定义的ImageButton控件n第3行代码将Button的显示内容更改为“Button按钮”n第4行代码利用setImageResource()函数,将新加入的png文件R.drawable.download传递给ImageButton1.Button button=(Button)findViewById(R.id.Button01);2.ImageButton imageButton=(ImageButton)findViewById(R.id.ImageButton01);3.button.setText(Button按钮);4.imageB

16、utton.setImageResource(R.drawable.download);Button和ImageButtonnButton和ImageButtonq按钮响应点击事件:添加点击事件的监听器n第2行代码中button对象通过调用setOnClickListener()函数,注册一个点击(Click)事件的监听器View.OnClickListener()n第3行代码是点击事件的回调函数n第4行代码将TextView的显示内容更改为“Button按钮”1.final TextView textView=(TextView)findViewById(R.id.TextView01);2

17、.button.setOnClickListener(new View.OnClickListener()3.public void onClick(View view)4.textView.setText(Button按钮);5.6.);7.imageButton.setOnClickListener(new View.OnClickListener()8.public void onClick(View view)9.textView.setText(ImageButton按钮);10.11.);Button和ImageButtonnButton和ImageButtonqView.OnCl

18、ickListener()nView.OnClickListener()是View定义的点击事件的监听器接口,并在接口中仅定义了onClick()函数n当Button从Android界面框架中接收到事件后,首先检查这个事件是否是点击事件,如果是点击事件,同时Button又注册了监听器,则会调用该监听器中的onClick()函数n每个View仅可以注册一个点击事件的监听器,如果使用setOnClickListener()函数注册第二个点击事件的监听器,之前注册的监听器将被自动注销Button和ImageButtonnButton和ImageButtonq多个按钮注册到同一个点击事件的监听器上,代

19、码如下:n第1行至第12行代码定义了一个名为buttonListener的点击事件监听器n第13行代码将该监听器注册到Button上n第14行代码将该监听器注册到ImageButton上1.Button.OnClickListener buttonListener=new Button.OnClickListener()2.Override3.public void onClick(View v)4.switch(v.getId()5.case R.id.Button01:6.textView.setText(Button按钮);7.return;8.case R.id.ImageButton

20、01:9.textView.setText(ImageButton按钮);10.return;11.12.;13.button.setOnClickListener(buttonListener);14.imageButton.setOnClickListener(buttonListener);CheckBox和RadioButtonnCheckBox和RadioButtonqCheckBox同时可以选择多个选项的控件qRadioButton则是仅可以选择一个选项的控件qRadioGroup是RadioButton的承载体,程序运行时不可见。应用程序中可能包含一个或多个RadioGroup,

21、一个RadioGroup包含多个RadioButton,在每个RadioGroup中,用户仅能够选择其中一个RadioButtonCheckBox和RadioButtonnCheckBox和RadioButtonq建立一个“CheckboxRadiobuttonDemo”工程,包含五个控件,从上至下分别是nTextView01nCheckBox01n CheckBox02nRadioButton01nRadioButton02CheckBox和RadioButtonnCheckBox和RadioButtonqCheckboxRadiobuttonDemo在XML文件中的代码1.5.9.10.1

22、4.15.18.22.23.27.28.CheckBox和RadioButtonnCheckBox和RadioButtonq引用CheckBox和RadioButton的方法参考下面的代码qCheckBox设置点击事件监听器的简要代码n与Button设置点击事件监听器中介绍的方法相似,唯一不同在于将Button.OnClickListener换成了CheckBox.OnClickListener1.CheckBox checkBox1=(CheckBox)findViewById(R.id.CheckBox01);2.RadioButton radioButton1=(RadioButton)

23、findViewById(R.id.RadioButton01);1.CheckBox.OnClickListener checkboxListener=new CheckBox.OnClickListener()2.Override3.public void onClick(View v)4./过程代码5.;6.checkBox1.setOnClickListener(checkboxListener);7.checkBox2.setOnClickListener(checkboxListener);CheckBox和RadioButtonnCheckBox和RadioButtonqRadi

24、oButton设置点击事件监听器的方法1.RadioButton.OnClickListener radioButtonListener=new RadioButton.OnClickListener()2.Override3.public void onClick(View v)4./过程代码5.;6.radioButton1.setOnClickListener(radioButtonListener);7.radioButton2.setOnClickListener(radioButtonListener);课堂例题:设计如下界面n示例程序Login项目(在Login_1.rar文件中

25、)界面控件Spinnerq一种能够从多个选项中选一选项的控件,使用浮动菜单为用户提供选择q类似于桌面程序的组合框(ComboBox)界面控件SpinnernSpinnerqSpinnerDemo在XML文件中的代码n第5行使用标签声明了一个Spinner控件n第6行代码中指定了该控件的宽度为300dipndip是设备独立像素,不同设备有不同 的现实效果1.5.8.Spinner在SpinnerDemo.java文件中,定义一个ArrayAdapter适配器,在ArrayAdapter中添加需要在Spinner中可以选择的内容q适配器绑定界面控件和底层数据,如果底层数据更改了,用户界面也相应修改

26、显示内容,就不需要应用程序再监视,从而极大的简化的代码的复杂性1.Spinner spinner=(Spinner)findViewById(R.id.Spinner01);2.List list =new ArrayList();3.list.add(Spinner子项1);4.list.add(Spinner子项2);5.list.add(Spinner子项3);6.ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_spinner_item,list);7.adapter.setDropDownViewRe

27、source(android.R.layout.simple_spinner_dropdown_item);8.spinner.setAdapter(adapter);Spinnerq第2行代码建立了一个数组列表(ArrayList),这种数组列表可以根据需要进行增减q表示数组列表中保存的是字符串类型的数据q在代码的第3、4、5行中,使用add()函数分别向数组列表中添加3个字符串q第6行代码建立了一个ArrayAdapter的数组适配器,数组适配器能够将界面控件和底层数据绑定在一起q第8行代码实现绑定过程,所有ArrayList中的数据,将显示在Spinner的浮动菜单中q第7行代码设定了S

28、pinner的浮动菜单的显示方式,其中,android.R.layout.simple_spinner_dropdown_item是Android系统内置的一种浮动菜单SpinnerqSpinner的浮动菜单的显示方式nandroid.R.layout.simple_spinner_dropdown_itemnandroid.R.layout.simple_spinner_itemListViewnListViewqListView是一种用于垂直显示的列表控件,如果显示内容过多,则会出现垂直滚动条qListView能够通过适配器将数据和自身绑定,在有限的屏幕上提供大量内容供用户选择,所以是经常

29、使用的用户界面控件qListView支持点击事件处理,用户可以用少量的代码实现复杂的选择功能ListViewn 列表的显示需要三个元素:1ListView:用来展示列表的View。2适配器:用来把数据映射到ListView上的中介。3数据:具体的将被映射的字符串,图片,或者基本组件。n根据列表的适配器类型,列表分为三种:ArrayAdapterSimpleAdapterSimpleCursorAdaptern其中以ArrayAdapter最为简单,只能展示一行字。SimpleAdapter有最好的扩充性,可以自定义出各种效果。SimpleCursorAdapter可以认为是SimpleAdap

30、ter对数据库的简单结合,可以方便的把数据库的内容以列表的形式展示出来。ListView ArrayAdapter()演示SimpleListView项目中的SimpleListView 代码使用了ArrayAdapter(Context context,int textViewResourceId,List objects)来装配数据,要装配这些数据就需要一个连接ListView视图对象和数组数据的适配器来实现两者的适配工作,ArrayAdapter的构造需要三个参数,依次为this,布局文件(注意这里的布局文件描述的是列表的每一行的布局,android.R.layout.simple_li

31、st_item_1是系统定义好的布局文件只显示一行文字),数据源(一个List集合)。同时用setAdapter()完成适配的最后工作。ListViewonItemClickpublic void onItemClick(AdapterView arg0,View arg1,int arg2,long arg3)参数说明:假设X,Y两个listview,X里有1,2,3,4这4个item,Y里有a,b,c,d这4个item。如果你点了b这个item;/arg0相当于listview Y适配器的一个指针,可以通过它来获得Y里装着的一切东西,再通俗点就是说告诉你,你点的是Y,不是X;/arg1是你

32、点b item的view的句柄,就是你可以用这个view,来获得b里的控件的id后操作控件;/arg2是b在Y适配器里的位置(生成listview时,适配器一个一个的做item,然后把它们按顺序排好队,再放到listview里,意思就是这个b是第position号做好的);/arg3是b在listview Y里的第几行的位置(很明显是第2行),大部分时候position和id的值是一样的。ListView 和 ListActivity的关系 ListActivity。这个类其实就是一个含有一个ListView组件的Activity类。也就是说,如果我们直接在一个普通的Activity中自己加一

33、个ListView也是完全可以取代这个ListActivity的,只是它更方便而已。ListView SimpleAdapter()SimpleAdapter的扩展性最好,可以定义各种各样的布局出来,可以放上ImageView(图片),还可以放上Button(按钮),CheckBox(复选框)等等。一般直接继承ListActivity,ListActivity和普通的Activity没有太大的差别,不同就是对显示ListView做了许多优化,方便显示。2.SimpleAdapter的构造函数:SimpleAdapter(Context context,List?extends Map data

34、,int resource,String from,int to)参数:1,context:上下文。2,data:基于Map的list。Data里边的每一项都和 ListView里边的每一项对应。Data里边的每一项都是一个Map类型,这个Map类里边包含了ListView每一行需要的数据。3,resource:就是一个布局layout,可引用系统提供的,也可以自定义。4,from:这是个名字数组,每个名字是为了在 ArrayList数组的每一个item索引Map的Object用的。5,to:里面是一个TextView数组。这些 TextView是以id的形式来表示的。例如:Android.R

35、.id.text1,这个text1在layout当中是可以索引的。SimpleAdapter()构造函数 构造函数有5个参数(1)上下文,一般是当前activity(2)数据源,类型为List,其中每行为list的一个节点,每个节点的内容是Map(3)布局样式,一个XML布局文件,为每行的样式(4)每个节点Map对应的键(5)适配布局文件中的IDnSimpleAdapter simpleAdapter=new SimpleAdapter(this,lists,R.layout.activity_list_view_demo2,n new StringweatherTextView,weathe

36、rImage,new intR.id.myTextView2,R.id.myImageView)例1:n在ListViewDemo1文件中例2:n在ListViewDemo2中 在ListViewDemo3中TabHostnTabHostqTab标签页的使用n首先要设计所有的分页的界面布局n在分页设计完成后,使用代码建立Tab标签页(TabActivity),并给每个分页添加标识和标题q每个分页建立一个XML文件,用以编辑和保存分页的界面布局,使用的方法与设计普通用户界面没有什么区别TabHostnTabHostq建立一个“TabDemo”程序,包含三个XML文件,分别为tab1.xml、ta

37、b2.xml和tab3.xml,这3个文件分别使用线性布局、相对布局和绝对布局示例中的main.xml的代码,并将布局的ID分别定义为layout01、layout02和layout03TabHostq在TabDemo.java文件中键入下面的代码,创建Tab标签页,并建立子页与界面布局直接的关联关系1.package edu.hrbeu.TabDemo;2.import android.app.TabActivity;3.import android.os.Bundle;4.import android.widget.TabHost;5.import android.view.LayoutI

38、nflater;6.SuppressWarnings(deprecation)7.public class TabDemoActivity extends TabActivity 8.Override9.public void onCreate(Bundle savedInstanceState)10.super.onCreate(savedInstanceState);11.TabHost tabHost=getTabHost();12.LayoutInflater.from(this).inflate(R.layout.tab1,tabHost.getTabContentView(),tr

39、ue);13.LayoutInflater.from(this).inflate(R.layout.tab2,tabHost.getTabContentView(),true);14.LayoutInflater.from(this).inflate(R.layout.tab3,tabHost.getTabContentView(),true);15.tabHost.addTab(tabHost.newTabSpec(TAB1)16.setIndicator(线性布局).setContent(R.id.layout01);17.tabHost.addTab(tabHost.newTabSpec

40、(TAB2)18.setIndicator(绝对布局).setContent(R.id.layout02);19.tabHost.addTab(tabHost.newTabSpec(TAB3)20.setIndicator(相对布局).setContent(R.id.layout03);21.22.TabHostn第8行代码的声明TabDemo类继承与TabActivity,与以往继承Activity不同,TabActivity支持内嵌多个Activity或Viewn第12行代码通过getTabHost()函数获得了Tab标签页的容器,用以承载Tab标签和分页的界面布局n第13行代码通过Lay

41、outInflater将tab1.xml文件中的布局转换为Tab标签页可以使用的View对象n第16行代码使用addTab()函数添加了第1个分页,tabHost.newTabSpec(TAB1)表明在第12行代码中建立的tabHost上,添加一个标识为TAB1的Tab分页n第17行代码使用setIndicator()函数设定分页显示的标题,使用setContent()函数设定分页所关联的界面布局TabHostq在实现Tab标签页时,除了可以将多个Tab分页放置在同一个Activity中,还可以将不同Tab分页加载到不同的Activity上n两种方式在界面显示上是没有区别的n建议使用后一种方式

42、处理Tab分页和Activity之间的关系,每个Tab分页对应一个Activity,有利于用户对界面控件的管理和控制3.3 界面布局n界面布局是用户界面结构的描述,定义了界面中所有元素、结构和相互关系。n一般声明界面布局有两种方法:(1)使用XML文件描述界面布局(2)在程序运行时动态添加或修改界面布局布局中常用属性的设置nandroid:id为控件指定相应的IDnandroid:text指定控件中显示的文字,需要注意的是,这里尽量使用strings.xml中定义的资源nAndroid:gravity指定控件中内容的基本位置,比如居中,居右等位置nandroid:textsize指定控件中字体

43、的大小nandroid:background指定控件所使用的背景色,RGB命名法(android:background=#23ad45)nandroid:width指定控件的宽度nandroid:height指定控件的高度nandroid:padding*指定控件的内边距,也就是控件当中的内容离控件边框的距离nandroid:singleLine如果设置为真的话,则将控件的内容在同行当中进行显示(逻辑值)布局示例n举例来说,一个包含文本视图和一个按钮的简单垂直布局如下:n/声明XML的版本和使用的编码,为了与中文兼容n *android:id属性声明了TextView的ID表示后面的字符串是I

44、D资源,加号(+)表示需要建立新资源名称,并添加到R.java文件中;斜杠后面的字符串(text)表示新资源的名称。如果资源不是新添加的,或属于Android框架的ID资源,则不需要使用加号(+),但必须添加Android包的命名空间,例如android:id=android:id/empty布局对象水平布局LinearLayout:n在一个方向上(垂直或水平)对齐所有子元素n所有子元素一个跟一个地堆放n一个垂直列表每行将只有一个子元素(无论它们有多宽)n一个水平列表只是一列的高度(最高子元素的高度来填充)*多个LinearLayout布局示例布局对象表格布局TableLayout:n 把子元

45、素放入到行与列中n 不显示行、列或是单元格边界线n 单元格不能横跨行stretchColums=1 第2列自动拉伸填满TableRow 一行LinearLayout与TableLayout布局示例布局对象绝对布局AbsoluteLayoutn使子元素能够指明确切的 X/Y 坐标显示在屏幕上n(0,0)是左上角n当你下移或右移时,坐标值增加n允许元素重叠(但是不推荐)注意:一般建议不使用 AbsoluteLayout 除非你有很好的理由来使用它因为它相当严格并且在不同的设备显示中不能很好地工作布局对象相对布局RelativeLayout:让子元素指定它们相对于其他元素的位置(通过 ID 来指定)

46、或相对于父布局对象相对布局中常用属性nlayout_above 将该控件的底部置于给定ID的控件之上写法:android;layout_above=+id/XXXlayout_below 将该控件的顶部置于给定ID的控件之下layout_toLeftOf将该控件的右边缘和给定ID的控件的左边对齐/相当于放在左边layout_toRightOf将该控件的左边缘和给定ID的控件的右边对齐layout_alignBaseline将该控件的baseline和给定ID控件的baseline对齐layout_alignBottom 将该空间的底部边缘与给定ID控件的底部边缘对齐layout_alignLe

47、ft将该控件的左边缘与给定ID控件的左边缘对齐layout_alignRight将该控件的右边缘与给定ID控件的右边缘对齐layout_alignTop将给定控件的顶部边缘与给定ID控件的顶部边缘对齐layout_alignParentBottom 如果为true,则将该控件的底部和父控件的底部对齐layout_alignParentLeft 如果为true,则将该控件的左边和父控件的左边对齐layout_alignParentRight 如果为true 则将控件的右边与父控件的右边对齐layout_alignParentTop 如果为true,则将控件的顶部与父控件的顶部对齐layout_c

48、enterHorizontal 如果为true,则控件被置于水平方向的中央layout_centerInParent 如果为true,则将控件置于父控件水平方向和垂直方向layout_centerVertical 如果为true 则将控件置于垂直方向的中央布局对象框架布局FrameLayoutn最简单的布局对象n在屏幕上保留空间,你可以在中间填充控件所有子元素都钉到屏幕的左上角不能为子元素指定位置。如果在FrameLayout中填充多个控件会互相覆盖(都从左上角开始)示例nnn n n n n菜单选项菜单n(一)选项菜单Options Menu(通过按手机上的菜单按钮,(通过按手机上的菜单按钮

49、,来呼出菜单)来呼出菜单)分两种:图标菜单、扩展菜单(见课本P90)选项菜单通过按设备菜单键打开。打开后,出现图标菜单,可包含6个菜单项。如果添加多于6个菜单项,多出的部分将通过“更多”菜单项在扩展菜单中显示。扩展菜单项在多于6个菜单项时自动添加。实现方法:通过重载Activity的onCreateOptionsMenu()方法菜单选项菜单public boolean onCreateOptionsMenu(Menu menu)menu.add(0,0,0,退出);menu.add(0,1,1,关于);return super.onCreateOptionsMenu(menu);这个add()

50、方法有四个参数:groupId,itemId,order,和 title。groupId 允许你关联这个菜单到一个菜单组中。itemId是用来识别菜单项的唯一的整数,在回调函数中使用。order 允许我们定义菜单的显示顺序-缺省情况下,它们以添加时的顺序排列。title菜单的名字(可以是一个字符串资源,为了本地化更加方便,建议你使用资源)。菜单选项菜单public boolean onOptionsItemSelected(MenuItem item)int item_id=item.getItemId();switch(item_id)case 0:Toast.makeText(this,你

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 项目策划与方案类
版权提示 | 免责声明

1,本文(android教程03-AndroidUI设计.ppt)为本站会员(hwpkd79526)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|