`

Android控件的组成

阅读更多

Android控件的组成

Android的控件都派生自View,控件容器是View Group

通过容器控件,可将交互界面的各个控件对象组织成控件树,上层父控件负责其下层控件的排列和绘制,并将交互事件自上而下传递到子控件树。每棵控件树都有一个ViewParent对象与其根控件绑定,该ViewParent对象是整棵控件树的交互事件的控制枢纽,负责将用户产生的交互事件传递到控件树的根控件,进行自顶而下的传播。控件树中的每个对象都有一个指向ViewParent的指针,当子控件的焦点、尺寸改变时会通知ViewParent,由ViewParent同一下发该事件。

从而每个控件只受父控件的控制,不受其他控件的影响。

 

Android交互事件的传输

Android控件中,交互事件沿着控件树自顶向下传输。

控件树上层的父控件收到交互事件后,会先行判定该事件的目标控件对象,如果该事件是自己所需的,则会截获事件进行处理;否则向下分发,递推逐级传递,直至事件被处理或忽略。

    AndroidView类中定义了一系列View.onXXX()事件函数来接听和处理各类交互事件。

    事件函数的返回值,如返回操作(KeyEvent.KEYCODE_BACK)是控制事件传播的重要手段。事件函数返回true说明已处理。

    容器控件ViewGroup的职责是将交互事件传播到其子控件。不同的事件,传播方式不同:触摸事件——ViewGroup判断事件发生区域在哪个子控件的领土上;对于按键事件,ViewGroup将事件转给具有焦点的子控件。

    继承的方式处理事件不灵活,会导致系统中出现大量的子控件类,且彼此复用性差。在面向对象设计中,提倡用“组合”的方式代替“继承”思想。

    View类提供了配套的事件监听函数应对事件。Android控件的事件监听模型是观察者模式。这种方式耦合性低。

 

 Android控件属性

标识:是一个正整数作为控件标识, View.getId()来获取。

可以使用View.findViewById()寻找控件。ID无需全局唯一,在给定子控件内唯一即可。

尺寸:每个控件都会占据一定的矩形区域。控件处理该矩形区域的事件,绘制交互界面。

控件的尺寸由父控件和自己共同决定。可以在代码中通过View.setLayoutParams(LayoutParams)设定。

Margin是设定容器控件中子控件与其矩形区域的距离,是控件容器的专有属性,通过MarginLayoutParams实现。Padding是控件对象内容与控件矩形区域边缘的距离,View.setPadding实现。

 位置:控件位置坐标系的原点在左上角,X轴自左向右,Y轴自上而下。可以通过View.getTopView.getLeft获取左上角坐标系(获取的是相对位置)。View.setLocationOnScreen实现绝对位置信息。

可见性:通过View.setVisibility实现。可见View.Visible,不可见View.INVISIBLE但还占据位置,消失View.GONE不占据位置。

焦点:控件焦点切换采用动态计算。用户通过方向键切换时,Android会计算在当前方向上与当前控件最接近的控件,并将焦点切换到这里。动态计算灵活,适配性强,但不一定准确。为了解决问题,Android提供了View.setNextFocusDownID,开发者可以精确设定上下左右的切换。

 

控件的丈量和绘制

控件从构造到呈现,还要经历控件尺寸的丈量和绘制。都是自上而下开始,由控件树的根控件发起,逐渐向下推。

各个控件尺寸的确定过程:

父控件开始向下调用View.measure函数,父控件将尺寸限制通知子控件,子控件结合自己需要的尺寸信息就可以推算出真实控件的大小。如果父控件尺寸不确定要根据子控件大小反向推推断。

控件明确尺寸后,重新从根控件开始,向下依次调用View.layout设置各个控件的最终位置和大小。

控件遍历整个控件树,在不同区域绘制。View.onDraw会被调用。当控件尺寸变化或内容变化时,会调用View.requestLayoutView.invalidate驱动控件树重新丈量和绘制

 

 

分享到:
评论

相关推荐

    Android各种控件源码

    Android控件(Widgets)是Android应用程序UI设计的核心组成部分,包括按钮(Button)、文本框(EditText)、图片视图(ImageView)、列表视图(ListView)、网格视图(GridView)、滑动选择器(SeekBar)、进度条...

    Android 流程步骤控件

    步骤控件通常由一系列表示步骤的小图标或文字组成,每个步骤代表一个具体的操作或状态。用户在完成每个步骤后,相应的图标或文字会进行高亮或进度更新,以指示当前所在步骤及整体进度。这种控件设计能够帮助用户理解...

    android基本控件练习

    ### Android基本控件练习知识点详解 #### 一、概述 Android平台提供了丰富的用户界面(UI)控件,使得开发者能够创建出既美观又实用的应用程序。本文档将介绍一个典型的注册界面设计实例,其中包含了多种常用的...

    常用android控件打包

    以下是对标题和描述中提及的Android控件及技术的详细解释: 1. **Dialog对话框**:Dialog是Android系统提供的一种显示临时信息的窗口,通常用于向用户展示警告、确认或者请求输入等场景。它不占据整个屏幕,而是...

    Android 所有控件的使用

    以下是一些主要的Android控件及其用法的详细说明: 1. **按钮(Button)**:Button是最常见的控件,用于用户点击触发某个操作。可以通过设置文字、图片或两者的组合来定制按钮外观。 2. **文本输入(EditText)**:...

    Android强大的日期时间选择控件

    在Android开发中,日期时间选择控件是用户界面中常见且重要的组成部分,它允许用户方便地选择日期或时间。在Android SDK中,内置了DatePicker和TimePicker两种原生控件,但有时候,开发者可能需要更加强大、定制化的...

    android 常用控件全解

    ### Android常用控件详解 #### 一、Android项目结构概览 在开发Android应用时,了解项目的文件结构至关重要。这不仅有助于我们更好地组织代码和资源,还能提高开发效率。 ##### 1.1 项目文件夹简介 - **src**:...

    Android控件大全以及各布局空间的使用方式

    Android控件是构成用户界面的基础元素,包括按钮(Button)、文本输入框(EditText)、单选按钮(RadioButton)、复选框(CheckBox)、图片(ImageButton)、进度条(ProgressBar)、列表视图(ListView)、网格视图(GridView)、...

    Android 表格控件-动态实现表格效果(内容、样式可扩展)

    本教程将探讨如何利用Android的自定义View或者现有的布局控件,如LinearLayout、TableLayout、GridLayout等,来实现一个可扩展内容和样式的表格控件。我们将主要关注以下几个方面: 1. **TableLayout基础**: ...

    Android-拥有三种状态纯Material风格的AndroidCheckbox控件

    本文将深入探讨如何实现一个具有三种状态的纯Material风格的Android Checkbox控件,以及与之相关的Android开发知识。 Checkbox在Android中通常用于提供多选选项,它的默认状态只有两种:选中和未选中。然而,有时...

    Android自定义摇杆控件

    摇杆控件由两部分组成:固定不动的基座和可移动的指针。在编程时,我们需要定义两个坐标变量来记录基座和指针的位置,同时设置合理的边界,防止指针超出摇杆范围。 实现这个自定义摇杆控件的步骤如下: 1. 创建一...

    Android-Android滑块验证码控件

    滑块控件通常由两部分组成:滑块图片和背景图片。滑块图片是可移动的部分,背景图片是固定不动的图像。我们可以创建两个ImageView或自定义View来显示这两部分,然后通过监听滑动事件来处理用户交互。 为了监听滑动...

    Android 控件之下拉框—Spinner控件

    总之,Android的Spinner控件是用户交互的重要组成部分,它简洁而实用。通过适配器填充数据、监听选择事件以及自定义样式,我们可以创建出符合应用需求的下拉选择组件。了解和掌握Spinner的使用方法,对于提升Android...

    Android自定义控件的demo

    本示例将深入讲解如何基于Android系统实现一个自定义的Button控件,该控件由一个ImageView和一个TextView组成,并添加了标签功能。以下我们将从以下几个方面展开讨论: 1. **基础知识**:在Android中,控件是构成UI...

    Android控件美化之Shape的使用

    ### Android控件美化之Shape的使用 在Android开发过程中,为了提升用户体验,界面美观是非常重要的一个环节。在美化界面的过程中,`Shape`是一种非常实用且灵活的工具,它可以帮助开发者轻松实现各种各样的视觉效果...

    超级漂亮的Android日历控件

    在Android应用开发中,日历控件是必不可少的组件之一,尤其对于日程管理、时间选择等场景。标题“超级漂亮的Android日历控件”暗示我们这里有一个美观且易用的日历视图,可能是一个自定义控件或者第三方库。描述中...

    android自定义Switch控件详解

    总结,自定义Switch控件涉及到对Android控件体系的理解、Drawable资源的使用、自定义属性的定义以及绘制逻辑的实现。通过这种方式,开发者可以完全控制Switch的外观和交互,为用户提供更加个性化的体验。同时,这也...

    android 控件宝典

    本资源“android 控件宝典”显然是一个全面介绍Android控件使用和布局设计的指南,对于开发者来说,它提供了实用且方便的参考资料。 在Android系统中,控件主要分为两大类:视图(View)和视图组(ViewGroup)。...

    Android控件大全使用方式

    ### Android控件大全使用方式详解 #### 一、Android控件概述 在Android开发中,控件(Widget)是用户界面的重要组成部分,用于构建应用程序的交互界面。Android提供了丰富的控件,包括基本的按钮、文本框、列表...

Global site tag (gtag.js) - Google Analytics