Android中的界面组成

屏幕是简化的窗口,在Android中,常常使用的就是这种简单的“窗口”。屏幕和屏幕中的内容是Android中UI构建的主要内容。这两个方面包括:

屏幕:活动(android.app.Activity);

屏幕中的内容:视图(android.view.View)。

Android中屏幕及其中内容的程序结构如图2-1所示。

如图2-1所示,android.app包中的Activity和android.view包中的View分别用于表示一个屏幕和一个视图的基类。

Android用户界面的基本构建方法分成以下几个步骤:

继承默认Activity实现自己的屏幕;

使用View的继承者作为屏幕中的内容;

响应屏幕及其内容中的事件。

屏幕(活动Activity)

android.app.Activity类是Android中的活动,是Android四种组件中用来表示UI方面的组件。一个Activity中最主要的内容就是一个视图(View),此外,这个类还包含了标题栏、菜单、对话框附属功能。

活动的生命周期如图2-2所示。

在应用程序中实现自己的活动的时候,通常需要继承一个Activity类,并主要实现Activity中的以下几个protected的方法:

protected void onCreate (BundlesavedInstanceState)      // 创建时调用

protected void onStart ()                                    // 开始时调用

protected void onResume ()                                   // 恢复时调用

protected void onPause ()                                    // 停止时调用

protected void onStop ()                                  // 完全停止时调用

protected void onRestart ()                             // 重新开始时调用

protected void onDestroy ()                             // 销毁时调用

这些以on为开头的方法用于指定一个活动的状态机转换时刻的行为,将在一个活动生命周期中运行的不同阶段被调用。

在一个Activity中,提供了以下一些接口来设置其中的内容:

public void  setContentView(int layoutResID)      // 以布局文件的方式来设置

public void  setContentView(View view)              //以视图类的方式来设置

public void  setContentView(View view,ViewGroup.LayoutParams params)

setContentView()用于将一个视图(View)设置到活动中,通常在所实现Activity的onCreate()阶段被调用。

屏幕中的内容(视图View)

android.view.View表示可见的视图内容,它表现为界面上的可视内容,也可以接收事件。在程序中具体使用的类一般是View的继承者。各种View的继承者可以在布局文件中被描述。

View的主要标识是它的id,查找子View的方法。

public final View findViewById(int id)

View的事件主要由其中的监听者(Listener)来获得,在View类中具有setOn{XXX}Listener()系列方法,内容如下所示:

public void  setOnClickListener(View.OnClickListener l);

public void setOnLongClickListener(View.OnLongClickListener l);

public void setOnFocusChangeListener(View.OnFocusChangeListener l);

public void  setOnKeyListener(View.OnKeyListener l);

public void  setOnTouchListener(View.OnTouchListener l);

public void setOnCreateContextMenuListener(View.OnCreateContextMenuListener l)

这些方法的参数分别为android.view包中的几个接口,如表2-1所示。

表2-1  事件处理接口

监听者功能

监  听  类

接口中的方法

单击

OnClickListener

void onClick(View v)

长按

OnLongClickListener

boolean onLongClick(View v)

焦点变化

OnFocusChangeListener

void onFocusChange(View v, boolean  hasFocus)

按键

OnKeyListener

boolean onKey(View v, int keyCode, KeyEvent  event)

触摸

OnTouchListener

boolean onTouch(View v, MotionEvent event)

上下文菜单

OnCreateContextMenuListener

void onCreateContextMenu(ContextMenu menu, View  v,

ContextMenu.ContextMenuInfo menuInfo)

这些接口通常需要被用户程序实现。需要实现的方法中,均以View为第一个参数,当这些方法被调用的时候,传入的第一个参数通常就是发生事件的View。

二者的结合

View及其继承者通常可以设置到Activity中,作为其中的内容来使用。设置的方法通常是使用Activity的setContentView()方法。

例如使用如下的方法将一个布局文件设置到活动当中。

setContentView(R.layout.mylayout);

布局文件可以转化成View类。这是需要使用的是android.view包中的LayoutInflater类。此时主要使用类中的以下几个方法:

public View inflate (int resource, ViewGroup root)

public View inflate (int resource, ViewGroup root, booleanattachToRoot)

public View inflate (XmlPullParser parser, ViewGroup root)

public View inflate (XmlPullParser parser, ViewGroup root, booleanattachToRoot)

LayoutInflater功能就是根据布局文件的id或者XML文件,将其转化为一个View类型的内容。

在一个活动中进行如下的调用,将布局文件设置到其中:

LayoutInflater factory = LayoutInflater.from(this);

final View mylayout = (View )factory.inflate(R.layout.mylayout,null);

setContentView(mylayout);

这种实现方式等价于上述直接将布局文件设置到Activity中的方式,但是两个setContentView()的参数不同,前者使用的是整数参数,表示布局文件的id,后者使用的是一个View类型。所谓XML格式的布局文件,经过解析之后的结果实际上是一个对多层次组成的View。

提示:Activity中的setContentView()一般设置布局文件即可,没有必要拆成解析和设置两个步骤。在需要View类型的参数时,LayoutInflater可完成布局文件到View的转换。

 

——本段文字节选自《Android经典应用程序开发》

图书详细信息:http://blog.csdn.net/broadview2006/article/details/7276196

Android中的界面组成相关推荐

  1. Android的配置界面PreferenceActivity

    我想大家对于android的系统配置界面应该不会陌生吧,即便陌生,那么下面的界面应该似曾相识吧,假若还是不认识,那么也没有关系,我们这一节主要就是介绍并讲解android 中系统配置界面的使用,相信大 ...

  2. Android中Activity启动模式详解

    在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. An ...

  3. android 不能安装app,android中两个不同名称的app不能同时安装

    ---恢复内容开始--- 两个app,第一个安装后,再安装第二个,会提示安装包损坏或者一切其他问题,但是这个安装包在别的手机可以正常安装,可以是因为以下问题 两个app中,包含有相同名称的provid ...

  4. 1._请写出5种以上的android中界面常用布局方式,跳槽季“充电宝”Android面试题(一)...

    1.请介绍下Android中常用的5种布局 Android中常用的5种布局分别为:FrameLaout(框架布局).LinearLayout(线性布局).AbsoluteLayout(绝对布局).Re ...

  5. android 界面组件,安卓开发学习周第三篇——Android中的UI组件

    原标题:安卓开发学习周第三篇--Android中的UI组件 在Android APP中,所有的用户界面元素都是由View和ViewGroup的对象构成的.View是绘制在屏幕上的用户能与之交互的一个对 ...

  6. android 线程 界面,android开发教程之子线程中更新界面

    每个Handler对象与创建它的线程相关联,并且每个Handler对象只能与一个线程相关联. Handler一般有两种用途:1)执行计划任务,你可以再预定的实现执行某些任务,可以模拟定时器.2)线程间 ...

  7. Android中Handler的使用方法——在子线程中更新界面

    本文主要介绍Android的Handler的使用方法.Handler可以发送Messsage和Runnable对象到与其相关联的线程的消息队列.每个Handler对象与创建它的线程相关联,并且每个Ha ...

  8. Android 8.0 学习(22) Android8.0平台Eng版本中显示界面切换闪红框

    Android O平台Eng版本中显示界面切换闪红框 1.问题 Version >= Android O1 在Android O平台Eng版本中,在切换显示界面.开任何apk.操作按钮等操作时, ...

  9. android软件欢迎界面,Android应用中实现一个软件启动的欢迎界面

    在一个Android应用启动时,可以根据需要为其设置一个欢迎界面.欢迎界面将是用户在启动应用 时看到的第一个界面,传达给用户第一感觉. 下面的几个web,各自提供了一种实现方式. 1.不用线程做And ...

  10. android无网络状态栏,Android中检查网络连接状态的变化,无网络时跳转到设置界面...

    在AndroidManifest.xml中加一个声明 1. 2. 3. 4. 5. NetCheckReceive.java文件如下 1.import android.content.Broadcas ...

最新文章

  1. Python全栈开发day2
  2. 方向键 上下左右的转译
  3. xfce4终端的字体颜色修改
  4. iphone闪退修复工具_iOS14 beta5公测版更新:问题基本修复,已更新ios14的用户一定要更新!...
  5. 前端学习(3255):react中动态初始化结果
  6. linux grep 匹配空格_17 个案例,5 分钟简单搞定 Linux 正则表达式!
  7. 解决eclipse无法解析导入org.eclipse.swt库
  8. 什么是机器学习?有哪些应用?终于有人讲明白了
  9. [导入]C#中的“装箱”与“拆箱”
  10. 【HDU1284 中南林业大学第十一届校赛 B:】兑换零钱(dp)
  11. 无人机倾斜摄影测绘工程毕业论文范文
  12. erb自动生成html页面一例
  13. 绝绝子!京东大牛用一文将Python 接口自动化测试解析透彻的不行~
  14. 有关程序员的几则冷笑话
  15. 全网超详细的VMware虚拟机安装Kali Linux系统以及首次启动Kali Linux系统的注意事项
  16. qq邮箱隐藏代码html,QQ邮箱原来这么好用,4个隐藏设置格调满满
  17. linux开发板通过网线连接电脑(win10)连接网络问题
  18. 爬虫实战篇--更换代理ip
  19. 该不该造自己的轮子?
  20. Entity Relation Fusion for Real-Time One-Stage Referring Expression Comprehension 2021

热门文章

  1. 算法:两条线段求交点
  2. linux回到上次目录与历史命令查找快捷方式
  3. Delphi编程分割图片的方法
  4. 【转】艺术设计、数字媒体、环艺、影视动画、摄影、广编专业…等…视频、教程、资讯、图库、作品汇总大全...
  5. sql server 游标和with as使用
  6. mysql 5.7 无法启动 服务没有报告任何错误
  7. Centos7搭建虚拟用户FTP
  8. Python的is和==区别
  9. 51nod 1378 夹克老爷的愤怒(树型dp+贪心)
  10. bzoj-1079 着色方案(dp)