[Android]用户界面设计

1. 声明性设计

设计用户界面的方法有两种,过程性设计和声明性设计。过程性设计是指用代码设计用户界面,例如,开发一个Swing应用程序时必须编写Java代码,以创建和操作所有用户界面对象。声明性设计不涉及任何代码,例如,在设计网页时使用HTML,描述了期望的网页布局,而不是如何实现。

Android同时支持过程性和声明性设计,允许开发人员使用任一风格创建用户界面,即可以绝大部分使用Java代码,也可以绝大部分使用XML描述符。虽然二者都是有效的,但谷歌建议尽可能使用声明性的XML语言,与相应的Java代码相比,XML代码往往更加短小易懂,而且在以后版本中发生变化的可能性不高。

Android程序是一个松散的活动集合,其中的每个活动都定义了一个用户界面屏幕。R.layout.activity_main是一个资源标识符,引用了res/layout目录中的activity_main.xml文件,如下所示:

wKioL1O7_G-AepLAAADtarIwDbU774.jpg


2. 资源管理

activity_main.xml文件以XML格式声明用户界面,在运行时,Android解析并实例化该文件中已定义的资源,并将其设置为当前活动的视图。R类是由Android Eclipse插件自动管理的,无论将一个文件放到res目录中的哪个位置,Android Eclipse插件都会注意到这一变化并自动在gen目录的R.java文件内添加资源ID,如果删除或修改了某个资源文件,R.java将保持同步,如下所示:

wKiom1O7_XTyQoKwAAMf7aYXwVY900.jpgAndroid资源管理器使用十六进制整数加载实际数据、字符串,以及被编译到软件包中的其他资源。无需关心这些资源的值,只要记住这些值是引用数据的句柄,而不是引用包含数据的对象的句柄。需要使用对象之前不会解压缩对象。

在Eclipse中双击activity_main.xml即可打开该文件,根据Eclipse的具体设置,双击activity_main.xml后出现的可能是可视化的布局编辑器,或是一个XML编辑器。单击底部的activity_main.xml选项卡,查看XML文件,可以看到对<RelativeLayout>的引用,如下所示:

wKiom1O9SRTRFC-yAAGj_JzDL2w721.jpg


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,如下所示:

wKiom1POZubBEJYxAAMZ_NvAS5c304.jpg

About活动应该在AboutActivity.java文件中定义,只需覆写onCreate()方法并调用setContentView()方法即可,如下所示:

wKiom1PFMCuToX_hAAFoqwgolE4522.jpg在activity_main.xml中添加一个Button,以便与About活动关联,如下所示:

wKioL1PFMMCwd7a1AAKFa4Rsxh8414.jpg而后在MainActivity.java中添加一些导入语句,在onCreate()方法中添加代码以调用findViewById()和setOnClickListener()方法,findViewById()方法用于根据资源ID查找Android视图,setOnClickListener()方法则通知Android当用户触摸或单击该视图时应触发哪个对象,如下所示:

wKiom1PFNFby-lN9AAKzy6dGorA501.jpg要想在Android中启动某个活动,首先需要创建Intent类的实例。Android中有两种Intent,public的Intent是在系统级注册的,可从任何应用程序内使用,private的Intent只能在一个应用程序内使用。此外,每个活动都需要在AndroidManifest.xml文件中声明,运行效果如下:

wKiom1PFQziQwnW4AAB14r8gx7Y751.jpg


5. 应用主题和菜单

主题是一个样式集合,可用于覆写Android部件的外观,Android附带了多个主题,可以通过名称进行引用。别外,通过子类化现有主题并覆写其默认值,用户也可以构造自己的主题。可以在res/values/styles.xml文件中自定义主题,要使用主题,首先在编辑器中再次打开AndroidManifest.xml文件,然后修改About活动的定义,如下所示:

wKioL1PLyFDQO33JAABuYacaGys492.jpg样式名称前的@android:前缀表示此处引用了由Android定义的资源,而不是用户自己在程序中定义的资源,再次运行程序,如下所示:

wKioL1PLyxnhqz20AACvrGQEvj8874.jpg

Android支持两类菜单:一种是在用户按下Menu按钮时弹出的菜单,另一种是用户用手指按住屏幕不放时弹出的上下文菜单。以第一种菜单为例,需要使用在res/menu/main.xml文件中定义的菜单,如下所示:

wKiom1POZl6i3GK-AAC8BCUBppc970.jpg

再使用MainActivity类中的onCreateOptionsMenu()方法,如下所示:

wKioL1POZ0jgCzhZAAI0o76K1cU580.jpg

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值