zoukankan      html  css  js  c++  java
  • Android中的界面组成

    Android中的界面组成

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

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

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

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

     

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

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

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

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

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

    屏幕(活动Activity

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

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

     

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

    protected void onCreate (Bundle savedInstanceState)      // 创建时调用

    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设置到活动中通常在所实现ActivityonCreate()阶段被调用。

    屏幕中的内容视图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中,作为其中的内容来使用。设置的方法通常是使用ActivitysetContentView()方法。

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

    setContentView(R.layout.mylayout);

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

    public View inflate (int resource, ViewGroup root)

    public View inflate (int resource, ViewGroup root, boolean attachToRoot)

    public View inflate (XmlPullParser parser, ViewGroup root)

    public View inflate (XmlPullParser parser, ViewGroup root, boolean attachToRoot)

    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://www.cnblogs.com/broadview/archive/2012/02/21/2361867.html

  • 相关阅读:
    log4j配置详解
    elasticsearch6.0版本安装head插件
    JAVA笔记-如何将百万级数据高效的导出到Excel表单
    抽象方法为什么不能被private与static修饰
    vue利用promise实现连续弹框
    vue代码片段
    h5元素高度超出屏幕但不滚动
    css3动画
    vue 引入静态图片404
    ios windows.open()不能打开
  • 原文地址:https://www.cnblogs.com/broadview/p/2365476.html
Copyright © 2011-2022 走看看