【Android】中级控件

news2024/11/26 16:37:39

其他布局

相对布局RelativeLayout

RelativeLayout下级视图的位置是相对位置,得有具体的参照物才能确定最终位置。如果不设定下级视图的参照物,那么下级视图默认显示在RelativeLayout内部的左上角。用于确定视图位置的参照物分两种,一种是与该视图自身平级的视图,另一种是该视图的上级视图(RelativeLayout)。与参照物对比,相对位置的属性与类型值见表3-1。
在这里插入图片描述
在这里插入图片描述

框架布局FrameLayout

FrameLayout也是较常用的布局,其下级视图无法指定所处的位置,只能统统从上级FrameLayout的左上角开始添加,并且后面添加的子视图会把之前的子视图覆盖掉。框架布局一般用于需要重叠显示的场合,比如绘图、游戏界面等,常见属性说明如下。

  • foreground:指定框架布局的前景图像。该图像在框架内部永远处于最顶层,不会被框架内的其他视图覆盖。
  • foregroundGravity:指定前景图像的对齐方式。该属性的取值说明同gravity。

编辑框

Android的两种编辑框,分别是文本编辑框EditText与自动完成编辑框AutoCompleteTextView。在介绍EditText控件时,除了基本属性和方法,还另外阐述了常见的4种编辑处理:更换光标、更换边框、自动隐藏输入法和输入回车符自动换行。

文本编辑框EditText

EditText是文本编辑框,用户可在此输入文本等信息。EditText的常用属性说明如下。

  • inputType:指定输入的文本类型,代码中对应的方法是setInputType。输入类型的取值说明见表3-3,若同时使用多种文本类型,则可使用竖线“|”把多种文本类型拼接起来。
  • maxLength:指定文本允许输入的最大长度。该属性无法通过代码设置。
  • hint:指定提示文本的内容,代码中对应的方法是setHint。
  • textColorHint:指定提示文本的颜色,代码中对应的方法是setHintTextColor。
    在这里插入图片描述

编辑框除了上述文本与提示文本的基本操作外,实际开发中还常常关注4个方面:更换编辑框的光标、更换编辑框的边框、自动隐藏输入法、输入回车符自动跳转。

EditText比较特殊,点击后只是让其获得焦点,再次点击才会触发点击事件。也就是说,要连续点击两次EditText才会处理点击事件。可以先给EditText注册一个焦点变更监听器,这个焦点变更监听器要实现接口OnFocusChangeListener,对应的事件处理方法是onFocusChange。

Activity基础

Activity的生命周期
  • onCreate:创建页面。把页面上的各个元素加载到内存中。
  • onStart:开始页面。把页面显示在屏幕上。
  • onResume:恢复页面。让页面在屏幕上活动起来,例如开启动画、开始任务等。
  • onPause:暂停页面。让页面在屏幕上的动作停下来。
  • onStop:停止页面。把页面从屏幕上撤下来。
  • onDestroy:销毁页面。把页面从内存中清除掉。
  • onRestart:重启页面。重新加载内存中的页面数据。
    首先打开页面ActJumpActivity,调用方法的顺序为:本页面onCreate→onStart→onResume。
    从ActJumpActivity跳转到ActNextActivity,调用方法的顺序为:上一个页面onPause→下一个页面onCreate→onStart→onResume→上一个页面onStop。
    从ActNextActivity回到ActJumpActivity(按返回键或在代码中调用finish方法),调用的方法顺序为:下一个页面onPause→上一个页面onRestart→onStart→onResume→下一个页面onStop→onDestroy。
使用Intent传递消息

Intent的中文名是意图,意思是我想让你干什么,简单地说,就是传递消息。Intent是各个组件之间信息沟通的桥梁,既能在Activity之间沟通,又能在Activity与Service之间沟通,也能在Activity与Broadcast之间沟通。总而言之,Intent用于处理Android各组件之间的通信,完成的工作主要有3部分:
(1)Intent需标明本次通信请求从哪里来、到哪里去、要怎么走。
(2)发起方携带本次通信需要的数据内容,接收方对收到的Intent数据进行解包。
(3)如果发起方要求判断接收方的处理结果,Intent就要负责让接收方传回应答的数据内容。
为了做好以上工作,就要给Intent配上必须的装备,Intent的组成部分见表3-5。
在这里插入图片描述

表达Intent的来往路径有两种方式,一种是显式Intent,另一种是隐式Intent。

1. 显式Intent,直接指定来源类与目标类名,属于精确匹配。

在声明一个Intent对象时,需要指定两个参数,第一个参数表示跳转的来源页面,第二个参数表示接下来要跳转到的页面类。具体的声明方式有如下3种:
(1)在构造函数中指定,示例代码如下:

 Intent intent = new Intent(this, ActResponseActivity.class);  // 创建一个目标确定的意图

(2)调用setClass方法指定,示例代码如下:

 Intent intent = new Intent();  // 创建一个新意图
 intent.setClass(this, ActResponseActivity.class);  // 设置意图要跳转的活动类

(3)调用setComponent方法指定,示例代码如下:

 Intent intent = new Intent();  // 创建一个新意图
 ComponentName component = new ComponentName(this, ActResponseActivity.class);
 intent.setComponent(component);  // 设置意图携带的组件信息
2. 隐式Intent,没有明确指定要跳转的类名,只给出一个动作让系统匹配拥有相同字串定义的目标,属于模糊匹配。

因为我们常常不希望直接暴露源码的类名,只给出一个事先定义好的名称,这样大家约定俗成、按图索骥就好,所以隐式Intent起到了过滤作用。这个定义好的动作名称是一个字符串,可以是自己定义的动作,也可以是已有的系统动作。系统动作的取值说明见表3-6。
表3-6
在这里插入图片描述

这个动作名称通过setAction方法指定,也可以通过构造函数Intent(String action)直接生成Intent对象。当然,由于动作是模糊匹配,因此有时需要更详细的路径,比如知道某人住在天通苑小区,并不能直接找到他家,还得说明他住在天通苑的哪一期、哪号楼、哪一层、哪一个单元。Uri和Category便是这样的路径与门类信息,Uri数据可通过构造函数Intent(String action,Uri uri)在生成对象时一起指定,也可通过setData方法指定(setData这个名字有歧义,实际就是setUri);Category可通过addCategory方法指定,之所以用add而不用set方法,是因为一个Intent可同时设置多个Category,一起进行过滤。
下面是一个调用系统拨号程序的例子,其中就用到了Uri:
在这里插入图片描述

隐式Intent还用到了过滤器的概念,即把不符合匹配条件的过滤掉,剩下符合条件的按照优先顺序调用。创建一个Android工程,AndroidManifest.xml里的intent-filter就是XML中的过滤器。比如下面这个最常见的主页面MainAcitivity,activity节点下面便设置了action和category的过滤条件。其中,android.intent.action.MAIN表示App的入口动作,android.intent.category.LAUNCHER表示在App启动时调用。
在这里插入图片描述

向下一个Activity传递参数

前面讲过,Intent的setData方法只指定到达目标的路径,并非本次通信所携带的参数信息,真正的参数信息存放在Extras中。Intent重载了很多种putExtra方法传递各种类型的参数,包括String、int、double等基本数据类型,甚至Parcelable、Serializable等序列化结构。不过只是调用putExtra方法显然不好管理,像送快递一样大小包裹随便扔,不但找起来不方便,丢了也难以知道。所以Android引入了Bundle概念,可以把Bundle理解为超市的寄包柜或快递收件柜,大小包裹由Bundle统一存取,方便又安全。
Bundle内部用于存放数据的实质结构是Map映射,可添加元素、删除元素,还可判断元素是否存在。开发者把Bundle全部打包好只需调用一次putExtras方法,把Bundle全部取出来也只需调用一次getExtras方法。
下面是前一个页面向后一个页面发送请求数据的代码:
Intent intent = new Intent(MainActivity.this, FirstActivity.class); // 创建一个目标确定的意图
Bundle bundle = new Bundle(); // 创建一个新包裹
bundle.putString(“name”, “张三”); // 往包裹存入一个字符串
bundle.putInt(“age”, 30); // 往包裹存入一个整型数
bundle.putDouble(“height”, 170.0f); // 往包裹存入一个双精度数
intent.putExtras(bundle); // 把快递包裹塞给意图
startActivity(intent); // 启动意图所向往的活动页面
下面是后一个页面接收前一个页面请求数据的代码:
Intent intent = getIntent(); // 获取前一个页面传来的意图
Bundle bundle = intent.getExtras(); // 卸下意图里的快递包裹
String name = bundle.getString(“name”, “”); // 从包裹中取出字符串
int age = bundle.getInt(“age”, 0); // 从包裹中取出整型数
double height = bundle.getDouble(“height”, 0.0f); // 从包裹中取出双精度数

向上一个Activity返回参数

如同一般的通信一样,Intent有时只把请求数据发送到下一个页面就行,有时还要处理下一个页面的应答数据(通常发生在下一个页面返回到上一个页面时)。如果只把请求数据发送到下一个页面,前一个页面调用startActivity方法就可以;如果还要处理一下个页面的应答数据,此时就得分多步处理,详细步骤如下:
步骤01 前一个页面打包好请求数据,调用方法startActivityForResult(Intent intent, int requestCode),表示需要处理结果数据,第二个参数表示请求编号,用于标识每次请求的唯一性。
步骤02 后一个页面接收请求数据,进行相应处理。
步骤03 后一个页面在返回前一个页面时,打包应答数据并调用setResult方法返回信息。setResult的第一个参数表示应答代码(成功还是失败),代码示例如下:
Intent intent = new Intent(); // 创建一个新意图
Bundle bundle = new Bundle(); // 创建一个新包裹
bundle.putString(“job”, “码农”); // 往包裹存入一个字符串
intent.putExtras(bundle); // 把快递包裹塞给意图
setResult(Activity.RESULT_OK, intent); // 携带意图返回前一个页面
finish(); // 关闭当前页面
步骤04 前一个页面重写方法onActivityResult,该方法的输入参数包含请求编号和应答代码,请求编号用于判断对应哪次请求,应答代码用于判断后一个页面是否处理成功。然后对应答数据进行解包处理,代码示例如下:
在这里插入图片描述

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

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

相关文章

算法专题三: 二分查找

目录 1. 朴素版: 二分查找2. 查找排序数组元素第一个和最后一个位置3. 搜索插入位置4. x的平方根5. 山脉数组的峰顶索引6. 寻找旋转数组中的最小值7. 点名 博客主页: 酷酷学!!! 感谢您的关注~ 正文开始 1. 朴素版: 二分查找 题目思路: 仅需根据题意, 找出二段性, 正确更新下标…

Python编码系列—Python访问者模式:为对象结构添加新功能的艺术

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

LLM端侧部署系列 | PowerInfer-2助力AI手机端侧部署47B大模型 (论文解读)

引言 简介 PowerInfer-2 概述 神经元感知的运行时推理 多态神经元引擎 内存中的神经元缓存 灵活的神经元加载 Neuron-Cluster-Level Pipeline 生成执行计划 执行 总结 0. 引言 一雨池塘水面平,淡磨明镜照檐楹。东风忽起垂杨舞,更作荷心万点声…

2024年liunx安装openvino非源码编译版(比源码编译简单!)

前言 真的要感慨一句,openvino源码编译真的麻烦!由于2023年之后openvino官网的之间下载取消之后,很多人只能选择源码编译,我也是研究了好几天,又是clone改变的库,又是安装什么,搞了三四天都没有…

已解决:TypeError: ‘int‘ object is not iterable

已解决:TypeError: ‘int’ object is not iterable 文章目录 写在前面问题描述报错原因分析 解决思路解决办法1. 检查代码中的 for 循环2. 检查函数返回值是否为可迭代对象3. 确认变量类型4. 使用 map() 或 list comprehension 处理整数5. 防止不必要的迭代 总结 写…

Leetcode—148. 排序链表【中等】

2024每日刷题(171) Leetcode—148. 排序链表 C实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr…

java计算机毕设课设—坦克大战游戏

这是什么系统? 坦克大战游戏是一款以坦克为主题的射击游戏,旨在为玩家提供一个刺激、有趣的游戏体验。该游戏不仅拥有丰富的功能,还注重玩家的互动体验。此系统是使用Java语言实现坦克大战游戏程序,玩家通过连接访问进入游戏&…

【C++】—— 类和对象(上)

【C】—— 类和对象(上) 文章目录 【C】—— 类和对象(上)前言1. 类的定义1.1 类定义格式1.2 访问限定符1.3 类域 2. 实例化2.1 实例化概念2.2 对象的大小 3. this指针4. C和C语言实现Stack对比结语 前言 小伙伴们大家好呀,今天我们就开始学习C的重点及难点——类和…

[python]Flask_Login

flask_login是flask框架中的一个拓展功能,用于更快捷的实现用户会话管理功能,主要处理登录,注销和长时间会话存储的功能处理。 目录 安装 使用 第一步,配置SECRET_KEY 第二步,创建LoginManager实例绑定app 第三步,用户类继承UserMixin …

Github优质项目推荐-第三期

文章目录 Github优质项目推荐 - 第三期一、【coding-interview-university】,305k stars - 软件工程师学习计划二、【drawdb】,20.1k stars - 数据库设计工具三、【twenty】,16k stars - 排名第一的开源 CRM四、【Douyin-Vue】,9.…

海南网站建设提升网站用户体验实用技巧

海南网站建设提升网站用户体验实用技巧 在当今数字时代,网站已成为企业展示形象和吸引客户的重要平台。尤其对于海南这一旅游胜地来说,优化网站用户体验显得尤为重要。以下是一些实用技巧,可帮助您提升网站的用户体验。 首先,确保…

柔性作业车间调度(FJSP)

1.1 调度问题的研究背景 生产调度是指针对一项可分解的工作(如产品制造),在尽可能满足工艺路线、资源情况、交货期等约束条件的前提下,通过下达生产指令,安排其组成部分(操作)所使用的资源、加工时间及加工的先后顺序,以获得产品制造时间或成本最优化的一项工作。 一般研究车间…

django的路由分发

前言: 在前面我们已经学习了基础的Django了,今天我们将继续学习,我们今天学习的是路由分发: 路由分发是Web框架中的一个核心概念,它指的是将不同的URL请求映射到对应的处理函数(视图)的过程。…

发现一篇瑞芯微RK3588上使用Gstreamer的文章(野火)

1. 前言 最近经常使用英伟达的Orin和瑞芯微RK3588做开发,自己还买了好几块开发板,很多需要自己琢磨,今天忽然发现了一篇文章,意外解决了一些之前的问题,以此作为记录: 文章链接:https://doc.embedfire.com/linux/rk356x/quick_start/zh/latest/lubancat_rk_software_har…

Redis基础三(redis的高级配置)

Redis进阶配置 一、Redis持久化操作 ​ 持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。(Redis 数据都放在内存中。如果机器挂掉,内存的数据就不存在。所以需要做持久化,将内存中的数据保存在磁盘&#xff0c…

Gralloc图形缓冲的分配过程

广告 首先帮我朋友打个广告 我们一起在运营一个视频号 感兴趣的可以帮忙点击右边这个小铃铛 铃铛 序 其实越往底下走在很多人嘴里就会变得很玄乎,变得不可思议,这里的gralloc就是一个native service,只是分装了一些调用接口,上…

使用Scikit-image进行图像处理入门

简介 在数据科学的广阔领域中,图像处理占据了重要的一席之地,为分析和处理视觉数据提供了各种工具和技术。Python 拥有丰富的库生态系统,为图像处理提供了多种选择,其中,scikit-image 凭借其强大且易用的功能脱颖而出…

记录使用gym和stable_baseline3训练出成功通关的贪吃蛇ai

参考自b站up林亦LYi的开源项目 传送门 本次只训练了cnn版本的 第一次接触这种项目,建python虚拟环境时出了点难以说清楚的小问题,安装不上requirement.txt中的gym库那个版本,折腾了一会,自己都乱了头绪,最后导致训练…

TMGM:黄金价格持稳,而WTI原油价格和天然气价格飙升

黄金价格顽强地拒绝下跌,昨天和周三继续抵制下行的趋势。 价格继续保持在近期的历史高位附近,很可能会有进一步上涨的动力。美元走强阻止了价格的进一步上涨,但总体上升趋势仍在进行中。 目前还没有明显的向下催化剂迹象,不过如…

c++联合体

// // Created by 徐昌真 on 2024/10/5. // #include <iostream> using namespace std;//定义一个结构体 struct DataS{ //内存空间独立int a;double b;char c[10]; };//定义一个联合体 union DataU{ //内存空间在一起int a;double b;char c[10]; };int main() {//创建…