Android连载之:第三章第二节:Android用户界面

Android第三章 Android用户界面程序设计 对于不同的适配器类型,ArrayAdapter是最简单的一种,只能显示一行文字,而SimpleAdapter的扩展性最好,可以定义各种各样的布局,可以放上ImageView,还可以放上Button和CheckBox等,因此我们可以用它来生成自定义列表。 阅读详情

 

3.2 Android用户界面

这个章节描述怎么实现一个基本的Android界面。它涉及构建屏幕基本元素,怎么在xml(定义文件)内定义屏幕、用你的代码生成、在不同任务你需要操作你的用户接口。Android生成屏幕有三种方式:xml配置生成;通过你自己用户界面接口生成;直接用代码生成。根据MVC原则,UI应该与程序逻辑相分离,因此,在XML中定义UI结构是高度推荐的。此外,一个程序从一个屏幕方案调整到另一个也容易得多。在XML中定义UI跟创建一个普通的HTML文档非常相似,例如,你有如下的一个文件:

<html>

<head>

<title>Page Title</title> 

</head> 

<body>

The content of the body element.

</body>

</html>

就如Android的XML布局一样,所有的元素都是结构化的,能够通过树形结构来表示:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout

 xmlns:android=http://schemas.android.com/apk/res/android

 android:orientation="vertical" 

android:layout_width="fill_parent"

android:layout_height="fill_parent"> 

<TextView 

android:layout_width="wrap_content" 

android:layout_height="wrap_content"

android:text="Hello World"/> 

</LinearLayout>

3.2.1屏幕元素的层次  

   Android应用程序的基础功能单元就是Activity--android.app.Activity类中的一个对象。一个Activity可以做很多事,但是他自己并不会显示到屏幕上。想要让你的Activity显示在屏幕上并且设计它的UI,你需要使用view和viewgroup--Android平台基础的用户界面表达单元。

Views 

一个view是一个android.view.View基础类的对象。它是一个存储有屏幕上特定的一个矩形内布局和内容属性的数据结构。一个View对象处理测距和布局,绘图,焦点变换,滚动条,还有屏幕区域自己表现的按键和手势。

View类作为一个基类,为widget(窗体部件)服务,widget--是一组用于绘制交互屏幕元素的完全实现子类。Widget处理它们自己的测距和绘图,所以你可以更快速地用它们去构建你的UI。可用到的widget包括Text,EditText,InputMethod,Button,RadioButton,Checkbox,和ScrollView……。 

Viewgroups 

一个ViewGroup是一个android.view.Viewgroup类的对象。正如同它的名字表明的一样,一个viewgroup是一个特殊的view对象,它的功能是去装载和管理一组下层的view和其他viewgroup,Viewgroup让你可以为你的UI增加结构并且将复杂的屏幕元素构建成一个独立的实体。 

Viewgroup类作为一个基类为layout(布局)服务,layout--是一组提供屏幕界面通用类型的完全实现子类。layout让你可以为一组view构建一个结构。

一个树形结构的界面 

在Android平台上,你用view树和viewgroup节点来定义一个Activity的UI,就如同下面图表一样。这个树可以如你需要那样简单或者复杂,并且你可以使用Android的预定义widget和layout或者你自定义的view类型来构建它。 

一个view和viewgroup树的样例: 

 

Picture 4 Android UI - Tree structure 

要将屏幕绑定一个树以便于渲染,你的Activity调用它的setContentView()方法并且传递一个参数给根节点对象。一旦Android系统获得了根节点的参数,它就可以直接通过节点来无效化,测距和绘制树。当你的Activity被激活并且获得焦点时,系统会通知你的activity并且请求根节点去测距并绘制树,根节点就会请求它的子节点去绘制它们自己,同时,每个树上的viewgroup节点负责绘制它的直接子节点。

正如之前提到的,每个view group都有测量它的有效空间,布局它的子对象,并且调用每个子对象的Draw()方法去绘制它们自己。子对象可能会请求获得一个它们在父对象中的大小和位置,但是父对象对于每个子对象的大小和位置有最终的决定权。

LayoutParams:一个子对象如何指定它的位置和大小 

每个viewgroup类都会使用一个继承于Viewgroup.LayoutParams的嵌套类。这个子类包含了一系列的属性类型,这些属性类型定义一个子对象位置和大小,与view group类相适应。 

layoutparams的一个样例:

要注意的是,每个LayoutParams子类都有它自己赋值的语法。每个子元素必须定义适用于它们父对象的LayoutParams,尽管父对象可能会为子元素定义不同的LayoutParams。 

所有的viewgroup都包括宽和高。很多还包括边界的定义(margin和border)。你可以非常精确地描述宽和高,尽管你并不想经常这么做。更多时候你希望你的view自行调整到适应内容大小,或者适应容器大小。

 Android 界面元素与Swing界面元素的比较 

   Android 界面元素

Swing 界面元素

Activities

Frame

Views

Components

TextViews

Labels

EditTexts

TextFields

Buttons

Buttons

Android和Swing的监听者设置也几乎一样:

3.2.2 通用布局对象

下面为在你的应用中为最普遍的view groups。这里介绍每种类型的一些基本信息;更深入的细节,请看每章前面的链接参考页。 

FrameLayout

FrameLayout是最简单的一个布局对象。它被定制为你屏幕上的一个空白备用区域,之后你可以在其中填充一个单一对象 — 比如,一张你要发布的图片。所有的子元素将会固定在屏幕的左上角;你不能为FrameLayout中的一个子元素指定一个位置。后一个子元素将会直接在前一个子元素之上进行覆盖填充,把它们部份或全部挡住(除非后一个子元素是透明的)。

LinearLayout

LinearLayout以你为它设置的垂直或水平的属性值,来排列所有的子元素。所有的子元素都被堆放在其它元素之后,因此一个垂直列表的每一行只会有一个元素,而不管他们有多宽,而一个水平列表将会只有一个行高(高度为最高子元素的高度加上边框高度)。LinearLayout保持子元素之间的间隔以及互相对齐(相对一个元素的右对齐、中间对齐或者左对齐)。 

LinearLayout还支持为单独的子元素指定weight。好处就是允许子元素可以填充屏幕上的剩余空间。这也避免了在一个大屏幕中,一串小对象挤成一堆的情况,而是允许他们放大填充空白。子元素指定一个weight值,剩余的空间就会按这些子元素指定的weight比例分配给这些子元素。默认的weight值为0。例如,如果有三个文本框,其中两个指定了weight值为1,那么,这两个文本框将等比例地放大,并填满剩余的空间,而第三个文本框不会放大。

下面的两个窗体采用LinearLayout,包含一组的元素:一个按钮,几个标签,几个文本框。两个窗体都为布局做了一番修饰。文本框的width被设置为FILL_PARENT;其它元素的width被设置为WRAP_CONTENT。默认的对齐方式为左对齐。左边的窗体没有设置weight(默认为0);右边的窗体的comments文本框weight被设置为1。如果Name文本框也被设置为1,那么Name和Comments这两个文本框将会有同样的高度。 

在一个水平排列的LinearLayout中,各项按他们的文本基线进行排列(第一列第一行的元素,即最上或最左,被设定为参考基线)。因此,人们在一个窗体中检索元素时,就不需要七上八下地读元素的文本了。我们可以在layout的XML中设置android:baselineAligned="false",来关闭这个设置。 

TableLayout

TableLayout将子元素的位置分配到行或列中。android的一个TableLayout由许多的TableRow组成,每个TableRow都会定义一个row(事实上,你可以定义其它的子对象,这在下面会解释到)。TableLayout容器不会显示row、cloumns或cell的边框线。每个row拥有0个或多个的cell;每个cell拥有一个View对象。表格由列和行组成许多的单元格。表格允许单元格为空。单元格不能跨列,这与HTML中的不一样。下图显示了一个TableLayout,图中的虚线代表不可视的单元格边框。 

http://www.top-e.org/jiaoshi/html/?296.html

【Android】实现应用简单的用户登录界面 文章目录实现应用简单的用户登录界面① activity_main.xml 布局Ⅰ.修改布局样式Ⅱ.添加主背景Ⅲ.添加登陆界面所需组件② 运行app③ 最终调整样式及代码 实现应用简单的用户登录界面 ① activity_main.xml 布局 Ⅰ.修改布局样式 1.将原有的布局样式更改为RelativeLayout相对布局样式 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:app="http://sch.. 阅读详情

相关推荐

EasyClick 原生UI连载十五

EasyClick 原生UI之切换页面显示

Mr、老鬼的博客 968

android系统新特性——用户界面以及系统界面改进

一类是系统的内置应用,这些应用提供了手机的基本功能。包括launcher、系统设置、电话、相机等。它们位于/packages/apps/目录下。理论上,这些应用都是可以被第三方应用所替代的,例如:我们完全可以安装一个第三方的电话、相机,而不使用系统的,这也是Android系统最为灵活的地方(注意:系统设置通常无法被第三方应用替代,因为它使用了一些拥有非常高权限的内部api。为了保证系统安装,这些api很多不会对外开放)。

qq_36828822的博客 1176

EasyClick 原生UI连载三十

原生UI FrameLayout布局详解

Mr、老鬼的博客 1190

初级Android开发学习笔记(二)图形用户界面设计-TextView

name用来设置这个文本的名称,之后在res/values/strings.xml文件中,设置具体的文本内容。View是用户界面组件的共同父类,几乎所有的用户界面组件都是继承View类而实现的,如TextView、Button、EditText等。我们首先在界面布局文件activity_main.xml中加入文本标签组件TextView,设置文本标签组件的属性。对View类及其子类的属性进行设置,可以在布局文件XML中设置,也可以通过成员方法在Java代码文件中动态设置。文本标签TextView。

2401_83587546的博客 2226

EasyClick 原生UI连载十八

EasyClick 原生UI连载 十八之底部标签栏UI简易框架

Mr、老鬼的博客 1278

EasyClick 原生UI连载十三

EasyClick 原生UI连载 EasyClick 原生UI之对话框UI

Mr、老鬼的博客 933

Android 用户界面详解

饭撒风

huangjianfeng21的博客 1798

EasyClick 原生UI连载二十一

EasyClick 原生UI连载之 CardView 布局 CardView 是 Google 官方发布 MD 风格卡片布局控件,开发者可以很方便的使用它将布局做成卡片效果

Mr、老鬼的博客 1123

EasyClick 原生UI连载九

什么是布局,布局就是一个容器,就是里面可以放很多东西的缸,盆,冰箱 。 线性布局就俩属性,里面的东西排成横线或者排成竖线。 相对布局,就是相对于另一个布局或者控件的位置摆放。 滚动布局,字面意思就是可以让页面滚动。

Mr、老鬼的博客 2333

EasyClick 原生UI连载十九

EasyClick 原生UI连载之配置idea创建Android xml布局模板

Mr、老鬼的博客 1401

EasyClick 原生UI教程

EasyClick 原生UI教程总纲 这篇主要列出本人创作的EasyClick 原生UI连载系列所有文章。

Mr、老鬼的博客 1万+

EasyClick原生UI连载二

EasyClick原生UI连载 EasyClick 原生UI 之常用控件

Mr、老鬼的博客 2048

安卓用户界面设计(仅布局界面)

第一次实训,也是对Android移动开发的一个认识,实现下用户界面设计

EasyClick 原生UI连载七

搭配AndroidStudio开发UI界面 编写写UI之前请看前几章连载系列了解EasyClick 官方支持的原生控件

Mr、老鬼的博客 1651

Power Bi数据分析案例:在线零售平台销售数据分析

该数据集为,涵盖2023年1月至2024年3月,包含用户群体特征、购买行为、产品偏好以及参与度指标。用户维度:Customer_ID,Age,Gender,City产品维度:Product_Category,Unit_Price事实表:Order_ID,Quantity,Total_Amount,Discount_Amount,Rating,Delivery_Time在Power Query当中处理销售日期列,并新增年龄段、浏览页面分段列。

2301_79586168的博客 1278

骚操作,尝试使用Xilinx XVC协议,通过Jlink来下载调试Xilink zynq FPGA芯片

最近一直在玩zynq芯片,手头使用的Xilinx Platform USB Cable 下载线真是辣鸡,速度慢如蜗牛,每次下载bit文件或者烧写flash文件都要大半天,实在是难以忍受。逻辑分析仪看了下xilinx的下载线,速度只有6.25M,并且数据间隔非常大,不懂这线的开发者咋想的,这总线利用率真是低到爆了 上图为xilinx DLC 10下载线波形,惨不忍睹! 为了不浪费生命在下载等待时间上,我打算找找看有没有别的仿真调试选择。经过一番查找后发现Xilinx的仿真器好像选择不是很多,要么贵死要

听我瞎扯淡的博客 1万+

EasyClick 原生UI连载十一

EaysClick 原生UI之主界面

Mr、老鬼的博客 1139

CANoe从入门到精通“保姆级”教程(二)- 堪称全网“最全”系列

CANoe各功能区介绍;

车载控制器AutoSAR软件开发工程师 2万+

EasyClick原生UI连载 一

EasyClick原生UI连载 EasyClick 原生UI 之常用控件

Mr、老鬼的博客 4405

海康VisionMaster表面缺陷滤波实战:从参数调优到工业检测避坑指南

本文深入探讨海康VisionMaster表面缺陷滤波技术在工业检测中的应用,从参数调优到ROI绘制与Blob分析的协同策略,提供金属外壳、锂电池铝壳等复杂表面的缺陷检测实战指南。通过多级滤波架构和动态ROI生成法,显著提升检出率至98.7%,误检率低于0.5%,为工业质检提供智能化解决方案。

ujm5678901的博客 325

汇川EASY系列之以太网通讯(MODBUS_TCP做从站)

汇川easy系列PLC做MODBUS_TCP从站,,ModbusTCP服务器默认开启,无需设置通信协议(即不需要配置),端口号为“502”。ModbusTCP从站最多支持31个ModbusTCP客户端(ModbusTCP主站)同时连接。

这是一个长期关注工控行业技术的博客,实现0-1的突破,期待您的关注和留言 8861

EasyClick原生UI连载四

EasyClick原生UI连载 EasyClick原生UI之布局

Mr、老鬼的博客 1275

Linux内核4.14版本——drm框架分析(1)——drm简介

本文介绍了DRM架构的发展历史、驱动框架以及简单示例,旨在帮助读者了解DRM架构的形成、功能流程实现。

phmatthaus的专栏 2553

EasyClick原生UI连载五

EasyClick原生UI连载 综合使用

Mr、老鬼的博客 1527

【YoloV8改进策略】上采样改进|EUCB,轻量高效的上采样模块|即插即用

YOLOv8作为当前最先进的实时目标检测与实例分割模型之一,其在速度与精度之间取得了出色的平衡。然而,在资源受限的边缘设备或对实时性要求极高的应用场景中,YOLOv8的计算开销,尤其是在特征金字塔网络(FPN)和路径聚合网络(PAN)中用于特征融合的上采样操作,仍然是一个瓶颈。YOLOv8的颈部(Neck)结构中广泛使用nn.Upsample进行上采样,该操作虽然简单,但缺乏对特征内容的感知能力,且后续通常需要标准卷积来修复因插值带来的伪影,这增加了不必要的计算负担。

m0_47867638的博客 751

Altium Designer(AD24/25)PCB编辑的几种方法介绍

本文介绍了Altium Designer(AD24/25)软件中PCB编辑的四种操作方法:1)通过菜单栏"Place→Component"激活;2)点击工具栏元器件图标;3)右键快捷菜单选择;4)快捷键P+C组合操作。建议初学者先通过菜单栏和快捷菜单熟悉操作,熟练后转为工具栏和快捷键以提高效率。文章配有操作示意图,帮助用户快速掌握PCB元器件放置技巧。

fydar的博客 939
上一篇: Linux常见使用方法
下一篇: 浅谈嵌入式培训行业
TopEmbedded
博客等级 码龄18年 58粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值