第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>
    <Button
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="1"
        ></Button>
    <Button
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="2"
        ></Button>
</TableRow>
    <TableRow>
        <Button
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="3"
            ></Button>
        <Button
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="4"
            ></Button>
    </TableRow>
</TableLayout>

常用属性

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

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

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

(5)GridLayout

使用

(6)AbsoluteLayout

使用

 

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

后端路线指导(4):后端春招秋招经验分享

后端春招&秋招经验分享 春招(暑期实习) /秋招是应届生非常重要的应聘时间,每一个想就业的同学一定要有所了解! 本篇内容&#xff0c;老白将与大家分享暑期实习和秋招如何应对招聘的个人经验&#xff0c;希望每个同学看完都能有所收获! 首先说明一下老白对于面试核心竞争力的…

Java比较运算符

关系运算符和比较运算符适用于条件判断类型。 相当于布尔值&#xff0c;只有True和False两个 符号 说明ab,判断a的值是否等于b的值&#xff0c;条件成立为true,不成立为false ! a!b,判断a和b的值是否不相等&#xff0c;条件成立为true,不成立为false > …

spring注解驱动系列-- spring容器创建原理

从源码开始探究spring容器的创建原理&#xff0c;下面是源码总步骤 Override public void refresh() throws BeansException, IllegalStateException {synchronized (this.startupShutdownMonitor) {// Prepare this context for refreshing.prepareRefresh();// Tell the subc…

Shell编程规范与变量-01

一、Shell脚本概述 在一些复杂的 Linux 维护工作中&#xff0c;大量重复性的输入和交互操作不仅费时费力&#xff0c;而且容易出错&#xff0c;而编写一个恰到好处的 Shell 脚本程序&#xff0c;可以批量处理、自动化地完成一系列维护任务&#xff0c;大大减轻管理员的负担。 1…

【数据结构与算法】线索二叉树 详解

为什么可在不增加指针域的情况下&#xff0c;对二叉树进行线索化&#xff1f; 不增加指针域&#xff1a;因为可以利用n1个空链域。 在线索二叉树中&#xff0c;为每个节点添加两个标志位&#xff0c;分别表示左指针和右指针是普通的孩子指针还是线索&#xff08;前驱或后继&a…

WPS没保存关闭了怎么恢复数据?4个方法(更新版)

想象一下&#xff0c;你正在用WPS奋笔疾书&#xff0c;灵感如泉水般涌出&#xff0c;突然间&#xff0c;电脑却跟你开了个玩笑——啪地一下&#xff0c;文档未保存就关闭了&#xff01;是不是感觉像是被泼了一盆冷水&#xff0c;所有的热情瞬间熄灭&#xff1f;别急&#xff0c…

Vue78-缓存路由组件

一、需求 路由切走的时候&#xff0c;组件会被销毁&#xff0c;路由切回来&#xff0c;组件被挂载&#xff01; 需要&#xff1a;路由切走的时候&#xff0c;组件不会被销毁。 二、代码实现 若是不加include属性&#xff0c;则在<router-view>里面展示的路由&#xff0c…

【MySQL进阶之路 | 高级篇】InnoDB存储结构(页的内部结构)

1. 数据库的存储结构 : 页 索引结构给我们提供了高效的索引方式&#xff0c;不过索引信息以及数据记录都是保存在文件上的.确切说是存储在页结构中.另一方面&#xff0c;索引是在存储引擎中实现的&#xff0c;MySQL服务器上的存储引擎负责对表中数据的读取和写入操作.不同的存…

MQTTfx连接阿里云(详细版)

1、介绍 作为物联网开放平台&#xff0c;阿里云可谓是吸引大多数嵌入式爱好者的平台。物联网MQTT协议火热的今天&#xff0c;你使用过阿里云吗&#xff1f;本篇文章带你接触阿里云&#xff0c;实现MQTT通信。 我们在测试MQTT之前先了解下什么是MQTT协议。大家都知道它是一种发…

面向对象修炼手册(一)(类与对象)(Java宝典)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;面向对象修炼手册 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 思想 代理和团体 类 1 基本概…

什么是N卡和A卡?有什么区别?

名人说&#xff1a;莫听穿林打叶声&#xff0c;何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 本篇笔记整理&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、什么是N卡和A卡&#xff1f;有什么区别&#xff1f;…

Qt creator day3练习

2、升级优化自己应用程序的登录界面。 要求&#xff1a; 1. qss实现 2. 需要有图层的叠加 &#xff08;QFrame&#xff09; 3. 设置纯净窗口后&#xff0c;有关闭等窗口功能。 4. 如果账号密码正确&#xff0c;则实现登录界面关闭&#xff0c;另一个应用界面显示。 widget…

WordPress插件:子比zibll主题插件 炙焰美化全开源插件V3.2——让你的网站瞬间焕发光彩

随着互联网的普及&#xff0c;越来越多的企业和个人开始拥有自己的网站。然而&#xff0c;一个美观、专业的网站却并非易事。幸运的是&#xff0c;现在市场上有许多优秀的WordPress插件可以帮助我们快速实现这一目标。今天&#xff0c;我们要介绍的就是一款名为“子比zibll主题…

告别手抖尴尬!教你轻松缓解手部震颤的小秘诀!

在我们的日常生活中&#xff0c;手抖这个现象可能并不罕见。不论是因为紧张、疲劳还是某些健康问题&#xff0c;手抖都会给我们的生活带来诸多不便。今天&#xff0c;就让我们一起探讨如何缓解手部震颤&#xff0c;让你告别手抖的尴尬&#xff01; 一、手抖的成因及影响 手抖&…

解两道四年级奥数题(等差数列)玩玩

1、1&#xff5e;200这200个连续自然数的全部数字之和是________。 2、2&#xff0c;4&#xff0c;6&#xff0c;……&#xff0c;2008这些偶数的所有各位数字之和是________。 这两道题算易错吧&#xff0c;这里求数字之和&#xff0c;比如124这个数的全部数字之和是1247。 …

python-爬虫篇-爬取百度贴吧,段友之家的图片和视频

#!/usr/bin/env python # -*- coding: utf-8 -*-""" 爬取百度贴吧&#xff0c;段友之家的图片和视频 author: cuizy time&#xff1a;2018-05-19 """import requests import bs4 import osdef write_file(file_url, file_type):""&quo…

【数据结构与算法】二叉树的性质 详解

在二叉树的第i层上至多有多少个结点。 在二叉树的第 i 层上至多有 2 i − 1 2^{i-1} 2i−1 个结点(i≥1)。 深度为 K的二叉树至多有多少个结点。 深度为 k 的二叉树上至多含 2 k − 1 2^k - 1 2k−1 个结点(k≥1)。 在一颗二叉树中, 其叶子结点数n0和度为二的结点数n2之间…

【机器学习】机器学习赋能交通出行:智能化实践与创新应用探索

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀目录 &#x1f4d2;1. 引言&#x1f4d9;2. 交通流量预测与优化&#x1f31e;数据准备&#x1f319;模型训练与预测⭐评估模型与优化 &#x…

cas客户端流程详解(源码解析)--单点登录

博主之前一直使用了cas客户端进行用户的单点登录操作&#xff0c;决定进行源码分析来看cas的整个流程&#xff0c;以便以后出现了问题还不知道是什么原因导致的 cas主要的形式就是通过过滤器的形式来实现的&#xff0c;来&#xff0c;贴上示例配置&#xff1a; 1 <list…

[C++ STL] list 详解

标题&#xff1a;[C STL] vector 详解 水墨不写bug 正文开始&#xff1a; 一、背景 C语言阶段&#xff0c;我们如果想要使用链表&#xff0c;需要自己手动实现一个链表。这是非常低效的做法&#xff0c;C中的STL中提供了链表“ list ”&#xff0c;我们在包含头文件 <list…