第2章 Android应用的界面编程

   🌈个人主页:小新_-

🎈个人座右铭:“成功者不是从不失败的人,而是从不放弃的人!”🎈

🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝

🏆所属专栏: Android移动开发欢迎订阅,持续更新中~~~

                      

         ✨让小新带着你快乐的学习吧~✨

目录

一、界面编程和视图(了解)

1、视图组件和容器组件

2、使用XML布局文件控制UI界面

3、在代码中控制UI界面

4、自定义UI组件

二、几组重要的UI组件(掌握)

(1)TextView(重点)

补充

(2)EditText

(3)Button(重点)

(4)RadioButton

(5)CheckBox

(6)ListView

(7)ImageView

三、布局管理器(掌握)

1、什么是布局管理器

2、常见布局管理器

(1)LinearLayout(重点)

(2)RelativeLayout(重点)

(3)FrameLayout

(4)TableLayout

(5)GridLayout

(6)AbsoluteLayout


一、界面编程和视图(了解)

1、视图组件和容器组件

Android应用的绝大多数UI组件都是放在Android.widget包及其子包、Android.view包及其子包中。值得注意的是,Android中所有的组件都是继承了View类,View组件代表一个空白的矩形区域。View类还有一个重要的子类ViewGroup,但ViewGoup类经常作为其他组件的容器使用。 Android的所有UI组件都建立在View、ViewGroup基础之上,它们的组织结构如图所示。

Android讲究逻辑层和视图层分离,开发中一般不在Activity中直接编写界面,而是在布局文件中编写。Android中所有组件都提供了两种方式来控制组件的运行:

  1. 在XML布局文件(即前面说的layout文件)中通过XML属性进行控制。
  2. 在Java代码(一般是指Activity)中通过调用方法进行控制。

2、使用XML布局文件控制UI界面

Android推荐使用这种方式来控制视图,因为这样不仅简单直接,而且将视图控制逻辑从Java代码中分离出来,单独在XML文件中控制,更好地体现了MVC原则。 在实际开发中,当遇到有很多UI组件时(实际上这种情况很常见),各个组件会通过android:id属性给每个组件设置一个唯一的标识。当需要在代码中访问指定的组件时(例如设置单击事件),就可以通过id值,利用方法       findViewById(R.id.id值)来访问。

在设置UI组件时有两个属性值最常用:android:layout_height、android:layout_width,这两个属性支持两种属性值:

(1)match_parent:指定子组件的高度和宽度与父组件的高度和宽度相同(实际还有填充的空白距离)。

(2)wrap_content:指定组件的大小恰好能包裹它的内容。

Android机制决定了UI组件的大小不仅受它实际宽度和高度的控制,还受它所在布局的高度和宽度控制,所以在设置组件的宽高时还要考虑布局的宽高。虽然Android中推荐使用XML方式来控制UI界面,但是有时碰到一些特殊情况,例如只需要一个组件时,在代码中采用new的方式比较合适。

下面来看一个完全由代码控制的UI界面的简单应用

3、在代码中控制UI界面

上面代码的中使用的三个组件LinearLayout、textView、button都是使用关键字new创建的,setContentView()方法加载new 出来的LinearLayout作为布局“容器”,再通过LinearLayout类的addView()方法把TextView和Button添加进“容器”,这样就组成如图所示界面。

可以看出每new一个组件都会传入一个this参数,这是由于创建UI组件时需要传入一个Context类型的参数,Context代表访问Android应用环境的全局信息的API。让UI组件持有一个Context参数,可以让这些UI组件通过该参数来获取Android应用环境的全局信息。

Context本身是一个抽象类,Android应用中的Activity和Service都继承了Context,因此Activity和Service都可直接作为Context使用。 从上述代码可以看出,完全在代码中控制UI界面不仅需要调用方法来设置UI组件的行为,而且还不利于高层的耦合,因此代码也显得十分臃肿。

而利用XML方式控制UI界面时,开发者只需要在XML布局文件中使用标签即可创建UI组件,而且只要使用属性值就可以控制UI组件的行为。

4、自定义UI组件

自定义UI组件创建时需要定义一个继承View类的子类,然后重写View类的一个或多个方法。通常需要被重写的方法如表所示

自定义组件完成之后,需要在Java代码中把该组件添加到容器中才可以看到想要的效果,代码如下: BallViewActivity.java文件

用XML布局文件的方式使用更简单,只需要在XML布局文件中直接引用即可,具体代码如下:

因为已经在XML布局文件中添加了自定义组件,所以BallViewActivity中的代码可以简化成如下:

显然,这种方式比在代码中控制界面要更方便。

二、几组重要的UI组件(掌握)

(1)TextView(重点)

最开始,我们有三个任务

第一个,我们来回顾新建一个项目

第二个,为TextView新建一个XML文件

完成后,如图所示xml文件

第三个,为XML文件新建一个java代码

第四部,注册

然后,我们就可以进入我们对于的java文件中运行我们的代码了

使用

补充

有关Android尺寸问题

(2)EditText

使用

(3)Button(重点)

由于涉及监听事件,后面讲解。其他属性继承于TextView

(4)RadioButton

概念:单选按钮就是一组按钮中只能选择一个,所以我们需要把RadioButton放到RadioGroup按钮组当中去,从而实现单选功能

使用

(5)CheckBox

概念:复选按钮即可以选择多个按钮,CheckBox是Button的子类,支持使用Button的所有属性

使用:

(6)ListView

现在value中的string中存入string值

然后引用

(7)ImageView

首先我们学习添加图片

使用

三、布局管理器(掌握)

1、什么是布局管理器

布局是一种可用于放置很多控件的容器,它可以按照一定的规律调整内部控件的位置,从而编写出精美的界面。当然,布局的内部除了放置控件外,也可以放置布局,通过多层布局的嵌套,就能够实现一些比较复杂的界面。布局和控件的关系如图所示

为了更好地管理界面中的组件,Android提供了布局管理器,通过布局管理器,Android应用的图形用户界面具备了良好的平台无关性。这就让各个控件可以有条不紊地摆放在界面上,从而极大地提升用户体验。

本节将为大家介绍LinearLayout(线性布局)、FrameLayout(帧布局)、RelativeLayout(相对布局)、AbsoluteLayout(绝对布局)、TableLayout(表格布局)、GridLayout(网格布局)六大基本布局以及它们常用的属性,并且结合不同布局的各自特点给出自身特有的属性(重复的属性不会列出)。

2、常见布局管理器

(1)LinearLayout(重点)

概念:Linear意为线性的,线型的。所以,该布局要么是横向的,要么是竖向的

常用属性

使用

编写这段代码,我们设计三个按钮,使用垂直方向,在design可以看到我们的代码实现的样子

(2)RelativeLayout(重点)

使用

使用

(3)FrameLayout

概念:帧布局,名字虽然听起来高大上,但具体说来其实就是从父容器的左上角开始绘制,后面的组件叠放在之前的组件上面,后续添加的控件会覆盖前一个。如图所示:

使用

*通常不使用FrameLayout**显示多项内容,因为它的布局很难调节
常用属性
layout_gravity

  1. top将对象放在其容器的顶部,不改变其大小.
  2. bottom将对象放在其容器的底部,不改变其大小.
  3. left 将对象放在其容器的左侧,不改变其大小.
  4. right将对象放在其容器的右侧,不改变其大小.

使用

(4)TableLayout

概念 表格布局是以行数和列数来确定位置进行排列,可用于制作表

其中TableRow为其子控件
使用

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent">
<TableRow><Buttonandroid:layout_height="wrap_content"android:layout_width="wrap_content"android:text="1"></Button><Buttonandroid:layout_height="wrap_content"android:layout_width="wrap_content"android:text="2"></Button>
</TableRow><TableRow><Buttonandroid:layout_height="wrap_content"android:layout_width="wrap_content"android:text="3"></Button><Buttonandroid:layout_height="wrap_content"android:layout_width="wrap_content"android:text="4"></Button></TableRow>
</TableLayout>

常用属性

  • collapseColumns(隐藏某一列,下标从0开始)
  • stretchColumns(拉伸某一列,下标从0开始)
  • shrinkColumns(收缩某一列,下标从0开始)

<TableRow><Buttonandroid:layout_height="wrap_content"android:layout_width="wrap_content"android:text="5"android:layout_span="2"></Button></TableRow>

 <TableRow><Buttonandroid:layout_height="wrap_content"android:layout_width="wrap_content"android:text="6"></Button><Buttonandroid:layout_height="wrap_content"android:layout_width="wrap_content"android:layout_column="3"android:text="7"></Button></TableRow>

(5)GridLayout

使用

(6)AbsoluteLayout

使用

 

最后,感谢大家的观看~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/31882.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

媒体邀约有啥要注意的

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体宣传加速季&#xff0c;100万补贴享不停&#xff0c;一手媒体资源&#xff0c;全国100城线下落地执行。详情请联系胡老师。 媒体邀约是邀请媒体参与活动或报道的重要过程&#xff0c…

搜索引擎推广基本概念与方法分享-华媒舍

销量是每个企业及个人在商业领域中追求的目标之一。而引擎霸屏推广就是一种高效的手段&#xff0c;通过该方法可以助你实现销量的狂揽。本文将为你科普引擎霸屏推广的基本概念与方法&#xff0c;帮助你了解如何运用这一有效的推广策略。 一、引擎霸屏推广 引擎霸屏推广指的是在…

【中学教资科目二】02中学课程

02中学课程 第一节 课程概述1.1 课程的分类 第二节 课程组织2.1 课程内容的文本表现形式2.2 课程评价 第三节 基础教育课程改革3.1 基础教育改革的目标3.2 新课改的课程结构 第一节 课程概述 1.1 课程的分类 学校课程有多种类型&#xff0c;其中最利于学生系统掌握人类所取得的…

软件缺陷及JIRA工具

一、软件缺陷及跟踪流程 1&#xff0c;软件缺陷信息 案例 &#xff08;1&#xff09;缺陷报告的基本内容 缺陷的标题 预置条件 重现步骤 期望结果 实际结果 &#xff08;2&#xff09;软件缺陷的状态 新建 打开 修复 关闭 &#xff08;3&#xff09;软件缺陷的严重程度 …

NeRF从入门到放弃2:InstantNGP

原始的NeRF每条光线上的点都要经过MLP的查询&#xff0c;才能得到其密度和颜色值&#xff0c;要查询的点非常多&#xff0c;而MLP的推理是比较耗时的。 InstantNGP将空间划分成多个层级的体素&#xff08;voxels&#xff09;&#xff0c;并且在每个体素内部使用神经网络来预测…

深入理解前端缓存

前端缓存是所有前端程序员在成长历程中必须要面临的问题&#xff0c;它会让我们的项目得到非常大的优化提升&#xff0c;同样也会带来一些其它方面的困扰。大部分前端程序员也了解一些缓存相关的知识&#xff0c;比如&#xff1a;强缓存、协商缓存、cookie等&#xff0c;但是我…

CTFHUB-SSRF-POST请求

通过file协议访问flag.php文件内容 ?urlfile:///var/www/html/flag.php 右键查看页面源代码 需要从内部携带key发送post数据包即可获得flag ?urlhttp://127.0.0.1/flag.php 得到了key 构造POST请求数据包&#xff0c;进行url编码&#xff08;新建一个txt文件&#xff0c;…

电力电源需要挑战的8大常见问题

电力电源需要挑战的8大常见问题 引言 如果说发电厂输出的是“干净”高质量的电源,但经过输配电,受天气、用户设备、人为因素损坏影响,电压过冲、跌落、中断、共模噪声等电源质量问题就相当突出。尤其在工业环境中,电源质量一般更差,不能忽视的是早年设计的大楼配电,已不能…

无线麦克风哪个品牌音质最好,揭秘k歌哪种麦克风音质好

无线领夹麦克风在自媒体行业中的地位日益凸显&#xff0c;它已经成为许多视频博主提升作品音频质量的秘密武器。不论是刚入门的自媒体新人&#xff0c;还是已经积累了一定粉丝基础的资深博主&#xff0c;都开始重视起音频设备的选择。一个好的领夹麦克风不仅能够提供清晰的录音…

经验总结--开关MOS管发热的一般原因/电源开发经验总结

开关MOS管发热的一般原因 做电源设计,或者做驱动方面的电路,难免要用到场效应管,也就是人们常说的MOS管。MOS管有很多种类,也有很多作用。做电源或者驱动的使用,当然就是用它的开关作用。 无论N型或者P型MOS管,其工作原理本质是一样的。MOS管是由加在输入端栅极的电压来控…

vben admin BasicTable表格基本使用

vben admin是一款强大的后台管理系统&#xff0c;广泛应用于各种项目中。本文将为您详细介绍如何使用 便您更快地上手并充分发挥其功能。 Table 表格 | Vben Admin一个开箱即用的前端框架https://jeesite.com/front/vben-admin/docs/components/table.html#usage 1.register:…

VirtualBox虚拟机下安装Ubuntu24.04操作系统

目录 0 背景1 虚拟机的安装1.1 下载安装包1.2 走安装向导 2 操作系统的安装2.1 下载光盘镜像文件2.2 安装操作系统到虚拟机上 3 基本配置3.1 网络连接方式3.2 共享文件夹3.3 设置显存大小 0 背景 首先说说Ubuntu系统&#xff0c;或者更普遍一点&#xff0c;Linux系统究竟有什么…

基于java+springboot+vue实现的智慧生活商城系统(文末源码+Lw)244

摘 要 计算机网络发展到现在已经好几十年了&#xff0c;在理论上面已经有了很丰富的基础&#xff0c;并且在现实生活中也到处都在使用&#xff0c;可以说&#xff0c;经过几十年的发展&#xff0c;互联网技术已经把地域信息的隔阂给消除了&#xff0c;让整个世界都可以即时通…

ionic7 从安装 到 项目启动最后打包成 apk

报错处理 在打包的时候遇到过几个问题&#xff0c;这里记录下来两个 Visual Studio Code运行ionic build出错显示ionic : 无法加载文件 ionic 项目通过 android studio 打开报错 capacitor.settings.gradle 文件不存在 说明 由于之前使用的是 ionic 3&#xff0c;当时打包的…

驾考小技巧:老北京布鞋!距离高考出分还剩3天,我却看到有些孩子已经拿了“满分”——早读(逆天打工人爬取热门微信文章解读)

我20年驾校4000多块钱&#xff0c;你呢&#xff1f; 引言Python 代码第一篇 洞见 距离高考出分还剩3天&#xff0c;我却看到有些孩子已经拿了“满分”第二篇 视频新闻结尾 引言 昨天的文章顺利发出 看来“梅西” 这两个字在我们这边 不是敏感词 只是很多个罗粉搞得有点过头了 …

Android设置页面Activity全屏(隐藏导航栏、状态栏)

3、代码中设置&#xff1a;在setContentView 之前调用 requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 注意&#xff1a; 当有全面屏手机可以显示虚拟…

公司名称含有关商标名称可能涉及侵权!

有个朋友找到普推商标知产老杨&#xff0c;说有个人给他打电话&#xff0c;说他的公司名称侵权另一家的商标名称&#xff0c;让他要改下公司名称&#xff0c;不改就要告侵权&#xff0c;此前看到过许多&#xff0c;在一些省市注册公司时&#xff0c;如果公司名称与已注册商标相…

聚类算法(1)---最大最小距离、C-均值算法

本篇文章是博主在人工智能等领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅解。文章分类在AI学习笔记&#…

象战----第十二届中山市邀请赛正赛

本次的题解一定让大家享受脑细胞碰撞与再生死亡的感受&#xff01;定然酣畅淋漓&#xff01;请耐心的读完 简称&#xff1a;让脑袋死机。。。 象战 老规矩先分析在打码&#xff1a; 注意到题目告诉我们&#xff1a;四个角落是不能放的 那么 我们设象在(i,j).(注意&#xff1a…

解决双击bootstrap.bat没有生成b2.exe文件

双击bootstrap.bat但是并没有没有生成b2.exe文件&#xff0c;会报如下错误&#xff1a; "cl" 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。D:\cppsoft\boost_1_85_0\tools\build\src\engine>dir *.exe 驱动器 D 中的卷是 Data 卷的序列号是…