1. 声明性设计
设计用户界面的方法有两种,过程性设计和声明性设计。过程性设计是指用代码设计用户界面,例如,开发一个Swing应用程序时必须编写Java代码,以创建和操作所有用户界面对象。声明性设计不涉及任何代码,例如,在设计网页时使用HTML,描述了期望的网页布局,而不是如何实现。
Android同时支持过程性和声明性设计,允许开发人员使用任一风格创建用户界面,即可以绝大部分使用Java代码,也可以绝大部分使用XML描述符。虽然二者都是有效的,但谷歌建议尽可能使用声明性的XML语言,与相应的Java代码相比,XML代码往往更加短小易懂,而且在以后版本中发生变化的可能性不高。
Android程序是一个松散的活动集合,其中的每个活动都定义了一个用户界面屏幕。R.layout.activity_main是一个资源标识符,引用了res/layout目录中的activity_main.xml文件,如下所示:
2. 资源管理
activity_main.xml文件以XML格式声明用户界面,在运行时,Android解析并实例化该文件中已定义的资源,并将其设置为当前活动的视图。R类是由Android Eclipse插件自动管理的,无论将一个文件放到res目录中的哪个位置,Android Eclipse插件都会注意到这一变化并自动在gen目录的R.java文件内添加资源ID,如果删除或修改了某个资源文件,R.java将保持同步,如下所示:
Android资源管理器使用十六进制整数加载实际数据、字符串,以及被编译到软件包中的其他资源。无需关心这些资源的值,只要记住这些值是引用数据的句柄,而不是引用包含数据的对象的句柄。需要使用对象之前不会解压缩对象。
在Eclipse中双击activity_main.xml即可打开该文件,根据Eclipse的具体设置,双击activity_main.xml后出现的可能是可视化的布局编辑器,或是一个XML编辑器。单击底部的activity_main.xml选项卡,查看XML文件,可以看到对<RelativeLayout>的引用,如下所示:
3. 布局
布局是存放一个或多个子对象及某种行为的容器,行为描述了如何将这些子对象放置在屏幕上其父对象的矩形区域中,以下是Android中最常用的几种布局:
1) FrameLayout: 框架布局,从屏幕的左上角开始显示子对象,主要用于选项卡视图和图像切换器。
2) LinearLayout: 线性布局,以单列或单行的形式显示子对象,这是最常用的布局方式。
3) RelativeLayout: 相对布局,相对于其他子对象或父对象的位置显示子对象,这种布局常用于表单中。
4) TableLayout: 表格布局,以多行和多列的方式显示子对象,类似HTML表格。
各种布局方式常用的一些参数如下:
1) xmlns: android="http://schemans.android.com/apk/res/android" 定义Android的XML命名空间,该参数只能在main.xml文件中的第一个XML标签处定义一次。
2) android: layout_width="fill_parent", android:layout_height="fill_parent",声明此布局的高度和宽度与父对象的高度和宽度相同。
如果在编辑器中看到关于缺少语法约束的警告,可以尽管忽略,与将英语文本硬编码到布局文件中不同,可以使用@string/resid这种语法形式引用res/values/strings.xml文件中的字符串。根据区域设置或其他参数的设置情况,还可以有其他资源文件。此外还可以使用一种新的语法形式:@id/resid,与引用在其他地方定义的资源ID不同,这种语法形式将创建一个新的资源ID供其他对象引用。
4. 实现对话窗口
可以在屏幕上创建一个弹出提示窗口,并显示一些与窗口有关的信息,阅读完这些文字后,可以按下按钮关闭窗口。实现这个功能有多种方法:
1) 定义一个新的Activity类并启动它。
2) 使用AlertDialog类并显示它。
3) 子类化Android的Dialog类并显示它。
下面将定义一个新的活动,它也需要一个布局文件,比如将文件命名为res/layout/activity_about.xml,如下所示:
About活动应该在AboutActivity.java文件中定义,只需覆写onCreate()方法并调用setContentView()方法即可,如下所示:
在activity_main.xml中添加一个Button,以便与About活动关联,如下所示:
而后在MainActivity.java中添加一些导入语句,在onCreate()方法中添加代码以调用findViewById()和setOnClickListener()方法,findViewById()方法用于根据资源ID查找Android视图,setOnClickListener()方法则通知Android当用户触摸或单击该视图时应触发哪个对象,如下所示:
要想在Android中启动某个活动,首先需要创建Intent类的实例。Android中有两种Intent,public的Intent是在系统级注册的,可从任何应用程序内使用,private的Intent只能在一个应用程序内使用。此外,每个活动都需要在AndroidManifest.xml文件中声明,运行效果如下:
5. 应用主题和菜单
主题是一个样式集合,可用于覆写Android部件的外观,Android附带了多个主题,可以通过名称进行引用。别外,通过子类化现有主题并覆写其默认值,用户也可以构造自己的主题。可以在res/values/styles.xml文件中自定义主题,要使用主题,首先在编辑器中再次打开AndroidManifest.xml文件,然后修改About活动的定义,如下所示:
样式名称前的@android:前缀表示此处引用了由Android定义的资源,而不是用户自己在程序中定义的资源,再次运行程序,如下所示:
Android支持两类菜单:一种是在用户按下Menu按钮时弹出的菜单,另一种是用户用手指按住屏幕不放时弹出的上下文菜单。以第一种菜单为例,需要使用在res/menu/main.xml文件中定义的菜单,如下所示:
再使用MainActivity类中的onCreateOptionsMenu()方法,如下所示:
getMenuInflater()方法返回一个MenuInflater实例,用于从XML文件中读取菜单定义并将其转换为实际的视图,用户选择任何菜单项时都将会调用onOptionsItemSelected()方法。
http://www.kvov.com//5173/wow709948912/100.html
http://www.kvov.com//5173/wow709948912/99.html
http://www.kvov.com//5173/wow709948912/98.html
http://www.kvov.com//5173/wow709948912/97.html
http://www.kvov.com//5173/wow709948912/96.html
http://www.kvov.com//5173/wow709948912/95.html
http://www.kvov.com//5173/wow709948912/94.html
http://www.kvov.com//5173/wow709948912/93.html
http://www.kvov.com//5173/wow709948912/92.html
http://www.kvov.com//5173/wow709948912/91.html
http://www.kvov.com//5173/wow709948912/90.html
http://www.kvov.com//5173/wow709948912/89.html
http://www.kvov.com//5173/wow709948912/88.html
http://www.kvov.com//5173/wow709948912/87.html
http://www.kvov.com//5173/wow709948912/86.html
http://www.kvov.com//5173/wow709948912/85.html
http://www.kvov.com//5173/wow709948912/84.html
http://www.kvov.com//5173/wow709948912/83.html
http://www.kvov.com//5173/wow709948912/82.html
http://www.kvov.com//5173/wow709948912/81.html
http://www.kvov.com//5173/wow709948912/80.html
http://www.kvov.com//5173/wow709948912/79.html
http://www.kvov.com//5173/wow709948912/78.html
http://www.kvov.com//5173/wow709948912/77.html
http://www.kvov.com//5173/wow709948912/76.html
http://www.kvov.com//5173/wow709948912/75.html
http://www.kvov.com//5173/wow709948912/74.html
http://www.kvov.com//5173/wow709948912/73.html
http://www.kvov.com//5173/wow709948912/72.html
http://www.kvov.com//5173/wow709948912/71.html
http://www.kvov.com//5173/wow709948912/70.html
http://www.kvov.com//5173/wow709948912/69.html
http://www.kvov.com//5173/wow709948912/68.html
http://www.kvov.com//5173/wow709948912/67.html
http://www.kvov.com//5173/wow709948912/66.html
http://www.kvov.com//5173/wow709948912/65.html
http://www.kvov.com//5173/wow709948912/64.html
http://www.kvov.com//5173/wow709948912/63.html
http://www.kvov.com//5173/wow709948912/62.html
http://www.kvov.com//5173/wow709948912/61.html
http://www.kvov.com//5173/wow709948912/60.html
http://www.kvov.com//5173/wow709948912/59.html
http://www.kvov.com//5173/wow709948912/58.html
http://www.kvov.com//5173/wow709948912/57.html
http://www.kvov.com//5173/wow709948912/56.html
http://www.kvov.com//5173/wow709948912/55.html
http://www.kvov.com//5173/wow709948912/54.html
http://www.kvov.com//5173/wow709948912/53.html
http://www.kvov.com//5173/wow709948912/52.html
http://www.kvov.com//5173/wow709948912/51.html
http://www.kvov.com//5173/wow709948912/50.html
http://www.kvov.com//5173/wow709948912/49.html
http://www.kvov.com//5173/wow709948912/48.html
http://www.kvov.com//5173/wow709948912/47.html
http://www.kvov.com//5173/wow709948912/46.html
http://www.kvov.com//5173/wow709948912/45.html
http://www.kvov.com//5173/wow709948912/44.html
http://www.kvov.com//5173/wow709948912/43.html
http://www.kvov.com//5173/wow1725747175/41.html
http://www.kvov.com//5173/wow1725747175/40.html
http://www.kvov.com//5173/wow1725747175/39.html
http://www.kvov.com//5173/wow1725747175/38.html
http://www.kvov.com//5173/wow1725747175/37.html
http://www.kvov.com//5173/wow1725747175/36.html
http://www.kvov.com//5173/wow1725747175/35.html
http://www.kvov.com//5173/wow1725747175/34.html
http://www.kvov.com//5173/wow1725747175/33.html
http://www.kvov.com//5173/wow1725747175/32.html
http://www.kvov.com//5173/wow1725747175/31.html
http://www.kvov.com//5173/wow1725747175/30.html
http://www.kvov.com//5173/wow1725747175/29.html
http://www.kvov.com//5173/wow1725747175/28.html
http://www.kvov.com//5173/wow1725747175/27.html
http://www.kvov.com//5173/wow1725747175/26.html
http://www.kvov.com//5173/wow1725747175/25.html
http://www.kvov.com//5173/wow1725747175/24.html
http://www.kvov.com//5173/wow1725747175/23.html
http://www.kvov.com//5173/wow1725747175/22.html
http://www.kvov.com//5173/wow1725747175/21.html
http://www.kvov.com//5173/wow1725747175/20.html
http://www.kvov.com//5173/wow1725747175/19.html
http://www.kvov.com//5173/wow1725747175/18.html
http://www.kvov.com//5173/wow1725747175/17.html
http://www.kvov.com//5173/wow1725747175/16.html
http://www.kvov.com//5173/wow1725747175/15.html
http://www.kvov.com//5173/wow1725747175/14.html
http://www.kvov.com//5173/wow1725747175/13.html
http://www.kvov.com//5173/wow1725747175/12.html
http://www.kvov.com//5173/wow1725747175/11.html
http://www.kvov.com//5173/wow1725747175/10.html
http://www.kvov.com//5173/wow1725747175/9.html
http://www.kvov.com//5173/wow1725747175/8.html
http://www.kvov.com//5173/wow1725747175/7.html
http://www.kvov.com//5173/wow1725747175/6.html
http://www.kvov.com//5173/wow1725747175/5.html
http://www.kvov.com//5173/wow1725747175/4.html
http://www.kvov.com//5173/wow1725747175/3.html
http://www.kvov.com//5173/wow1725747175/2.html
http://www.kvov.com//5173/wow1725747175/1.html
http://www.kvov.com//5173/wow709948912/42.html