当前位置: 首页 > news >正文

移动应用-Android-开发指南

Android-UI开发指南

  • Android Studio调试
  • UI设计
    • UI框架
    • 布局Layout
    • 文本框
  • android的活动
    • Activity基本概念
    • Activity的生命周期
    • Activity栈
    • 创建Activity
    • 管理Activity
    • Activity间传递数据
  • Fragment
  • Adapter
  • RecyclerView
  • RecyclerView Adapter(适配器)
  • 事件
    • setOnItemLongClickListener()方法

在这里插入图片描述

Android Studio调试

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

UI设计

UI框架

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

布局Layout

在这里插入图片描述在这里插入图片描述

1.线性布局 LinearLayout在这里插入图片描述

  • 排列方式(orientation) 有横竖两种方向的,水平和垂直
    在xml文件中:
android:orientation="vertical"   // 垂直排列
android:orientation="horizontal" // 水平排列

在java代码中:

linearLayout.setOrientation(LinearLayout.VERTICAL);  // 设置垂直排列
linearLayout.setOrientation(LinearLayout.HORIZONTAL);// 设置水平排列
  • 这里需要注意:
android:orientation="vertical",子View使用layout_gravity在垂直方向上的设定无效
android:orientation="horizontal",子View使用layout_gravity在水平方向上的设定无效
  • 摆放位置(gravity/layout_gravity)

gravity是针对当前 控件里面 内容 的摆放,
如果是容器,则针对的是容器里面子view的摆放;
如果是控件,则针对的是控件里面内容的摆放。

layout_gravity是指当前控件在 父控件里面 的摆放位置,
不过需要注意的一点是父控件设置的gravity的级别要低于子控件设置的layout_gravity。

  • 权重(layout_weight)
    layout_weight
    在LinearLayout布局之中,权重也是一个很重要的属性。简单来说就是按比例来分配控件占用父控件的大小。

若C-child表示子布局声明的大小,B-blank表示剩余布局的大小,P-percent表示子布局占据父布局剩余布局的比例,则子布局最终的实际大小R-reality为:

R = C + B * P

在这里插入图片描述

我们来按照公式来计算

 R = C + B * P = 0dp + (B-0dp-0dp) * (1/2) = (1/2)B

也就是父布局的1/2。

  • weightSum
    LinearLayout有一个权重数量的标记:weightSum。
    在LinearLayout中没有声明weightSum时,
    默认的就是各个控件权重的总和。

  • 0dp与wrap_content
    谷歌官方建议子布局的layout_width使用0dp,来分比例显示布局,
    和wrap_content大同小异,当使用layout_weight时,都表示占据剩余宽度或高度的比重。

但两者有明显区别。

使用0dp时,要考虑所分配的布局宽度是否小于控件实际宽度

  • B是剩余布局的大小 = 父布局大小 - 子控件大小之和

    B = C - (C + C) = -C;

    R = C + B * P = C + (-C) * (1/3) = 2/3C
    这里的C就是父布局的大小也就是match_parent。

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

三个属性都用来适应视图的 水平或 垂直大小,
一个以视图的 内容或尺寸 为基础的 布局比
精确地指定视图范围更加方便。

1)fill_parent

设置一个构件的布局为fill_parent将强制性地使构件扩展,
以填充布局单元内尽可能多的空间。
这跟Windows控件的dockstyle属性大体一致。
设置一个顶部布局或控件为fill_parent将强制性让它布满整个屏幕。

2) wrap_content

设置一个视图的尺寸为wrap_content将强制性地使视图扩展以显示全部内容。
以TextView和ImageView控件为例,
设置为wrap_content将完整显示其内部的文本和图像。
布局元素将根据内容更改大小。
设置一个视图的尺寸为wrap_content大体等同于设置Windows控件的Autosize属性为True。

3)match_parent
Android2.2中match_parent和fill_parent是一个意思 .
两个参数意思一样,match_parent更贴切,
于是从2.2开始两个词都可以用。
那么如果考虑低版本的使用情况你就需要用fill_parent了

文本框

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

android的活动

在这里插入图片描述

Activity基本概念

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

Activity的生命周期

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

Activity栈

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

创建Activity

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

管理Activity

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Activity间传递数据

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Fragment

Adapter

负责将数据绑定到View上

RecyclerView

RecyclerView是用于展示大量数据集合的高效控件

RecyclerView Adapter(适配器)

是Android开发中用于管理RecyclerView的重要组件之一。

主要完成以下几个任务:

创建ViewHolder:在RecyclerView中,每个子项都需要一个ViewHolder来显示数据。Adapter负责创建和管理ViewHolder对象,通常通过继承RecyclerView.Adapter类来实现自定义的Adapter,并重写其中的方法。

绑定数据到ViewHolder:Adapter中的onBindViewHolder()方法负责将数据与ViewHolder进行绑定。在该方法中,您可以获取当前位置的数据,并将其设置到ViewHolder的各个视图中。

定义Item视图类型:如果RecyclerView中存在多个不同的Item视图类型,Adapter可以通过重写getItemViewType()方法返回不同的视图类型,以便RecyclerView能够正确渲染不同类型的子项。

确定子项数量:Adapter需要实现getItemCount()方法来指定RecyclerView中子项的数量。

响应用户交互:通过Adapter可以为RecyclerView的子项添加点击事件、长按事件等交互操作。

总之,RecyclerView Adapter充当了RecyclerView与数据之间的桥梁,负责将数据展示到RecyclerView中,并处理与用户交互相关的操作。

事件

setOnItemLongClickListener()方法

 LinearLayout mainLayout = new LinearLayout(this);mainLayout.setOrientation(LinearLayout.VERTICAL);mainLayout.setBackgroundColor(0xFFF6F8FB);FrameLayout frameLayout = new FrameLayout(this);frameLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,0,1));mainLayout.addView(frameLayout);LinearLayout tabLayout = new LinearLayout(this);tabLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,dip2px(88)));tabLayout.setOrientation(LinearLayout.HORIZONTAL);tabLayout.setPadding(dip2px(15), 0, dip2px(15), dip2px(15));tabLayout.setBackgroundResource(R.drawable.sp_main_tab_n);mainLayout.addView(tabLayout);// 添加第一个TabFrameLayout tab1FrameLayout = new FrameLayout(this);tab1FrameLayout.setLayoutParams(new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT,1));tabLayout.addView(tab1FrameLayout);LinearLayout tab1Layout = new LinearLayout(this);tab1Layout.setId(R.id.tabLin5);tab1Layout.setLayoutParams(new LinearLayout.LayoutParams(dip2px(64),dip2px(56)));tab1Layout.setOrientation(LinearLayout.VERTICAL);tab1Layout.setGravity(Gravity.CENTER);tab1Layout.setBackgroundResource(R.drawable.sp_main_tab);tab1FrameLayout.addView(tab1Layout);ImageView tab1ImageView = new ImageView(this);tab1ImageView.setId(R.id.iv5);tab1ImageView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT));tab1ImageView.setImageResource(R.drawable.sp_home_tab5);tab1Layout.addView(tab1ImageView);TextView tab1TextView = new TextView(this);tab1TextView.setId(R.id.tv_tab5);tab1TextView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT));tab1TextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);tab1TextView.setGravity(Gravity.CENTER);tab1TextView.setTextColor(ContextCompat.getColor(this, R.color.s_main_tab_text));tab1TextView.setText(R.string.Contacts);tab1Layout.addView(tab1TextView);// 设置TabLayout置底显示LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) tabLayout.getLayoutParams();params.gravity = Gravity.BOTTOM;tabLayout.setLayoutParams(params);// 添加其他Tab的代码类似,省略setContentView(mainLayout);private int dip2px(float dpValue) {final float scale = getResources().getDisplayMetrics().density;return (int) (dpValue * scale + 0.5f);}

相关文章:

移动应用-Android-开发指南

Android-UI开发指南 Android Studio调试UI设计UI框架布局Layout文本框 android的活动Activity基本概念Activity的生命周期Activity栈创建Activity管理ActivityActivity间传递数据 FragmentAdapterRecyclerViewRecyclerView Adapter(适配器)事件setOnItem…...

免费开源的非标项目型制造BOM一键导入方案介绍

非标项目型制造,每一个订单都会引入很多新料号、新BoM、新工艺路线。实施ERP/MES系统,实现生产管理数字化,第一步就是要导入这些料号、BoM和工艺。项目型制造,大多数订单只生产一次。但在ERP/MES系统中,订单的料号、Bo…...

用合成数据训练车辆姿态估计神经网络

我们的客户希望开发一款应用程序,引导用户通过 AR 指南和自动照片拍摄来拍摄更高质量的汽车照片。 本文重点介绍构建汽车姿态估计组件的技术。 在应用程序中,用户被引导站在与汽车一定的角度和距离,以标准化的方式捕捉最好的照片。 当用户处于…...

【QT开发笔记-基础篇】| 第四章 事件QEvent | 4.5 键盘事件

本章要实现的整体效果如下: QEvent::KeyPress ​ 键盘按下时,触发该事件,它对应的子类是 QKeyEvent QEvent::KeyRelease ​ 键盘抬起时,触发该事件,它对应的子类是 QKeyEvent 本节通过两个案例来讲解这 2 个事件&…...

爬取微博热榜并将其存储为csv文件

🙌秋名山码民的主页 😂oi退役选手,Java、大数据、单片机、IoT均有所涉猎,热爱技术,技术无罪 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 获取源码,添加WX 目录 前言1.…...

国庆中秋特辑(八)Spring Boot项目如何使用JPA

国庆中秋特辑系列文章: 国庆中秋特辑(八)Spring Boot项目如何使用JPA 国庆中秋特辑(七)Java软件工程师常见20道编程面试题 国庆中秋特辑(六)大学生常见30道宝藏编程面试题 国庆中秋特辑&…...

用jad反编译工具查看java接口相关的默认修饰符

接口抽象类复习 -> 默认修饰符是啥 -> jad反编译证明 https://www.cnblogs.com/changrunwei/p/6618117.html 文章目录 背景操作过程反编译前后对比操作截图结论 背景 今天刷到这篇文章,想起之前笔试题总是记不清,所以想证明下。 之前一直不清楚要…...

axios的get请求时数组参数没有下标

开发新项目过程中 发现get请求时 数组参数没有下标 这样肯定是不行的 后端接口需要数组[0]: 7 数组[1]:4这样的数据 原因是因为在请求拦截器没有处理需要的参数 解决方法 在请求拦截器 处理一下参数 import axios, { AxiosError, AxiosInstance, AxiosRequestHeaders } fro…...

bochs 对 Linux0.11 进行调试 (TODO: 后面可以考虑集成 vscode+gdb+qemu)

我在阅读 Linux0.11 源码时,对一个指令 LDS 感到困惑。 看了下 intel 指令集手册,能猜到 LDS 的功能,但不确定。 于是决定搭建调试环境,看看 LDS 的功能是否真如自己猜测。 首先 make debug 运行 qemu-Linux0.11,命…...

一文告知HTTP GET是否可以有请求体

HTTP GET是否可以有请求体 先说结论: HTTP协议没有规定GET请求不能携带请求体,但是部分浏览器会不支持,因此不建议GET请求携带请求体。 HTTP 协议没有为 GET 请求的 body 赋予语义,也就是即不要求也不禁止 GET 请求带 body。大多数…...

防止SQL注入攻击的综合解决方案

文章目录 摘要背景和危害性防御措施示例代码(Java)示例代码(PHP)示例MySQL命令示例代码(Python)示例代码(C#,使用Entity Framework) 进一步防御SQL注入攻击的措施使用ORM…...

MapReduce(林子雨慕课课程)

文章目录 7. MapReduce7.1 MapReduce简介7.1.1 分布式并行编程7.1.2 MapReduce模型简介 7.2 MapReduce体系结构7.3 MapReduce工作流程概述7.4 Shuffle过程原理7.5 MapReduce应用程序的执行过程7.6 WordCount实例分析7.7 MapReduce的具体应用7.8 MaReduce编程实践 7. MapReduce …...

PHP聊天系统源码 在线聊天系统网站源码 后台自适应PC与移动端

程序前台与后台自适应PC与移动端,支持一对多交流,可以自由创建新的房间与解散创建的房间,集成签到功能,等级功能,房间创建者可以对用户进行禁言、拉黑处理,房间可以由房间创建者自由设置进入密码&#xff0…...

算法题:买卖股票的最佳时机 II (贪心算法解决股票问题)

这道题是贪心算法的中级难度练习题,由于题目设定,整个价格都是透明的,这里并不涉及需要预测股票涨势的问题。解决思路不难,就是一旦股票价格开始下降了就买入,一旦上升了,就赶紧卖出。(完整题目…...

Redis-持久化机制

持久化机制介绍 RDBAOFRDB和AOF对比 RDB rdb的话是利用了写时复制技术,他是看时间间隔内key值的变化量,就比如20秒内如果有5个key改变过的话他就会创建一个fork子进程(bgsave),通过这个子进程,将数据快照进…...

【LeetCode热题100】--155.最小栈

155.最小栈 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元…...

Allegro 17.2如何直接更新元件封装?

想必很多从事电子设计的小伙伴,都有这样的经历:有些时候原理图和PCB设计是由不同的工程师负责,然后偶尔需要在没有原理图的情况下直接对PCB作品进行操作,如更新元件封装等操作,这种环节不仅费时费力,效率贼…...

高效数据管理:Java助力实现Excel数据验证

摘要:本文由葡萄城技术团队原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言 在Java中,开发者可以使用一些开源的库(如Apache POI&#xff09…...

Easysearch Chart 0.2.0都有哪些变化

Easysearch Chart 包更新了,让我们来看看都有哪些变化: Docker 镜像升级 Service 名称调整,支持 NodePort 模式部署 现在让我们用 NodePort 模式部署一下: # helm search repo infinilabs NAME CHART VERSION …...

RV1126-RV1109-进入uboot的按键和名字显示-HOSTNAME

今天添加一个小功能,就是uboot是按CTRLC进入的 今日我做了一个定制,让按L或者l让也进入uboot指令模式,并且修改主板名字显示 默认是CTRLC:键码值是0x03(ASCII对照表) 于是代码中跟踪: //rv1126_rv1109/u-boot/common/console.c int ctrlc(void) { #ifndef CONFIG_SANDBOXif (…...

学习vue-router

可参见: vue-router 详解_vue router_七月J的博客-CSDN博客 https://www.cnblogs.com/chen-ao666/p/17144552.html vue-router的使用 使用vue-router的步骤: 创建路由组件 配置路由映射: 组件和路径映射关系 使用路由: 通过和 <router-link>: 该标签是一个vue-router中…...

Python爬虫提高排名

在如今竞争激烈的互联网时代&#xff0c;网站的SEO优化变得尤为重要。而Python爬虫作为一种强大的工具&#xff0c;可以帮助网站主们提升搜索排名&#xff0c;吸引更多的流量和用户。本文将为您揭秘如何利用Python爬虫来改善您的SEO优化&#xff0c;并帮助您提升搜索排名。无论…...

SQL获取正数第N个或倒数第N个数据

这里我们使用Order By与Limit的组合&#xff1a; Order By&#xff1a;可以将某个序列值按照从大到小或从小到大排序Limit&#xff1a;如果类似Limit 5表示前5个&#xff0c;Limit 3,5表示从第4个位置&#xff08;以0为开始&#xff09;开始往后取5个 通过这样的组合就可以实…...

链表(2)——带头双向循环链表

&#x1f341;一、链表的分类 &#x1f315;1.单向或者双向 &#x1f315;2.带头或者不带头&#xff08;有无哨兵&#xff09; &#x1f315;3.循环或者不循环 &#x1f315;4.无头单向非循环链表&#xff08;常用&#xff09; &#x1f315;5.带头双向循环链表&#xff08;常用…...

C语言 函数指针

函数指针是C语言中的一种特殊类型&#xff0c;它允许你像操作变量一样操作函数。函数指针的主要用途是存储并后续调用一组函数。 在C语言中&#xff0c;函数指针的定义通常如下所示&#xff1a; 返回类型 (*指针变量名)(参数类型) 例如&#xff0c;如果你有一个返回整数并接受…...

F. Vasilije Loves Number Theory

Problem - F - Codeforces 思路&#xff1a;分析一下题意&#xff0c;对于第一种操作来说&#xff0c;每次乘以x&#xff0c;那么nn*x&#xff0c;然后问是否存在一个a使得gcd(n,a)1并且n*a的约数个数等于n&#xff0c;有最大公约数等于1我们能够知道其实这两个数是互质的&…...

electron打包后主进程下载文件崩溃

electronvue3写了一个小项目&#xff0c;实现了一个文件下载功能 存在的问题 打包后&#xff0c;应用下载文件崩溃代码 // 渲染进程window.electron.ipcRenderer.invoke(save-file, {path: r.filePath,fileurl: previewUrl,}).then(response > {console.log(response ----…...

Spring实例化源码解析之Custom Events下集(九)

上集从官网的角度讲解了基本的使用和源码的内容&#xff0c;没有深入的进行分析&#xff0c;本章将从源码的角度分析ApplicationEvent、ApplicationListener、ApplicationEventMulticaster这三者之间的关系。 initApplicationEventMulticaster 上一章后续部分给出了源码的含义…...

python numpy库关键函数说明

python numpy库函数说明 np.argwhere()np.dtype()np.shape()np.zeros() np.argwhere() 输入参数是一个基本的逻辑表达式&#xff0c;输出检索结果的索引值。 >>> x np.arange(6).reshape(2,3) >>> x array([[0, 1, 2],[3, 4, 5]]) >>> np.argwhe…...

【Linux C】Linux如何执行一个程序(程序存储空间、系统调用、内核调用)

文章目录 一、程序存储空间1.1 C语言程序存储空间1.2 用户空间和内核空间1.3 用户模式和内核模式 二、内核调用-系统调用-C语言库函数2.1 系统调用和内核调用2.2 C语言库函数 三、Linux如何执行一个程序 一、程序存储空间 本节说的空间主要是指内存空间&#xff0c;即程序如何分…...