学习Android的第二天

目录

Android User Interface 用户界面

UI

Android View与ViewGroup的概念

Android View

android.view.View

android.view.View XML 属性

android:id 属性 

Android ViewGroup

android.view.ViewGroup

ViewGroup.LayoutParams

ViewGroup.MarginLayoutParams

ViewGroup 重要的子类

Android Units 单位


Android User Interface 用户界面

UI

UI 是用户界面(User Interface)的缩写。用户界面是用户与计算机系统或设备进行交互的一种方式,它包括用户能够看到、触摸、听到或以其他方式感知的所有元素。UI 的设计旨在使用户的交互体验更加直观、有效和愉悦。用户界面可以包括图形界面、文本界面、声音界面等各种形式,目的是让用户能够轻松地与软件、应用程序或设备进行沟通和操作。

UI 设计涵盖了许多方面,包括布局、颜色、图标、字体、交互元素等,以确保用户在使用产品时能够方便、快捷地完成任务,并且有良好的使用体验。UI 设计不仅关注外观,还关注用户与系统之间的交互方式,以提高用户的满意度和效率。

Android View与ViewGroup的概念

在 Android 应用程序中,是由 View 和 ViewGroup 及其派生类组合而成的,构建了整个用户界面。其中,View 是所有 UI 组件的基类,而 ViewGroup 是容纳 View 及其派生类的容器,ViewGroup 也是从 View 派生出来的。这种组合方式使得开发者可以使用各种预定义的 View 和 ViewGroup 子类,从而更轻松地构建用户友好的应用界面。

在这个框架下,View 作为用户可以看到和与之交互的基本构建块,而 ViewGroup 则作为布局容器,用于组织和容纳各种 View 对象。这种组合的设计使得应用可以适应不同的屏幕尺寸和设备,提供了灵活性和可维护性。

Android确实提供了丰富的预定义 View 和 ViewGroup 子类,这些类包括了常见的用户界面元素和布局模式,使得开发者能够更加高效地构建应用程序界面。这种模块化和可组合的设计是 Android UI 开发的基石之一。

UI布局的层次结构:

View 和 ViewGroup 是 Android 中两个关键的类,它们之间有一些基本的区别:

1、用途:

  • View 是表示用户界面上的单个元素,可以是按钮、文本框、图像等。View 负责处理用户输入、绘制自身等任务。
  • ViewGroup 是用于容纳和组织多个 View 或其他 ViewGroup 的容器。它定义了一种布局方式,用于排列和摆放其包含的视图。

2、层次结构:

  • View 是 ViewGroup 的基类,但它本身并不容纳其他视图。
  • ViewGroup 是一个特殊的 View,它继承自 View,但它能够包含多个 View,形成一个层次结构。

3、继承关系:

  • View 是直接继承自 Object 类的,而 ViewGroup 是继承自 View 类的,因此 ViewGroup 具有 View 类的一些特性和方法。

4、功能:

  • View 主要负责用户界面上的可见元素,处理触摸事件、绘制等。
  • ViewGroup 主要负责容纳和管理多个 View,定义它们的布局和相对位置。

5、使用场景:

  • View 通常用于表示单个控件或用户界面元素,例如按钮、文本框等。
  • ViewGroup 用于创建布局结构,容纳和组织多个 View 或其他 ViewGroup,例如线性布局、相对布局等。

总的来说,View 和 ViewGroup 一起构成了 Android 用户界面的基础。View 是构建界面上具体元素的基类,而 ViewGroup 是用于组织这些元素的容器。在 Android 开发中,了解和合理使用这两个类对于构建灵活、可维护的用户界面至关重要。

Android View

android.view.View

android.view.View 类是 Android 中用户界面的基本构建块。

1、矩形区域:

  • View 对象会占用屏幕上的矩形区域,这个区域用于显示视图的内容。

2、绘图:

  • View 负责自身的绘制,包括显示文本、图像、颜色等。这是通过重写 onDraw() 方法来实现的,该方法允许开发者自定义视图的外观。

3、事件处理:

  • View 处理用户输入事件,例如触摸屏幕、点击按钮等。这些事件的处理可以通过重写相应的方法,例如 onTouchEvent(),onClick() 等。

4、交互式 UI 组件:

  • View 用于创建各种交互式用户界面组件,例如按钮 (Button)、文本视图 (TextView)、图像视图 (ImageView) 等。每个具体的 UI 元素都是 View 的子类。

在 Android 应用程序中,View 是构建用户界面的基础。通过组合不同类型的 View 对象,开发者可以构建出多样化且功能强大的用户界面,从简单的按钮到复杂的列表视图都是由 View 构成的。

android.view.View XML 属性

下表列出了 android.view.View 所有可设置的 XML 属性

XML 属性说明
android:alpha设置该组件的透明度
android:background设置该组件的背景颜色
android:clickable设置该组件是否可以激发单击事件
android:contentDescription设置该组件的主要描述信息
android:drawingCasheQuanlity设置该组件所使用的绘制缓存质量
android:fadeScrollbars设置该组件不使用滚动条时,是否淡出显示滚动条
android:fadingEdge设置滚动该组件时边界是否使用淡出效果
android:fadingEdgeLength设置淡出边界长度
android:focusable设置该组件是否可以得到焦点
android:focusableInTouchMode设置该组件在触摸模式下是否可以得到焦点
android:id设置该组件ViewById来获取它
android:isScrollContainer设置该组件是否可以作为可滚动容器使用
android:keepScreenOn设置该组件是否会强制手机屏幕一直打开
android:longClickable设置该组件是否可以响应长单击事件
android:minHeight设置该组件的最小高度
android:minWidth设置该组件的最小宽度
android:nextFocusDown设置焦点在该组件上,且按向下键时获得焦点的组件id
android:nextFocusRight设置焦点在该组件上,且按向右键时获得焦点的组件id
android:nextFocusLeft设置焦点在该组件上,且按向左键时获得焦点的组件id
android:nextFocusUp设置焦点在该组件上,且按向上键时获得焦点的组件id
android:onClick为该组件的单击事件绑定监听器
android:padding在组件的四边设置填充区域
android:paddingLeft在组件的左边设置填充区域
android:paddingRight在组件的右边设置填充区域
android:paddingBottom在组件的底边设置填充区域
android:paddingTop在组件的顶边设置填充区域
android:rotation设置该组件的旋转角度
android:rotationX设置该组件绕X轴旋转的角度
android:rotationY设置该组件绕Y轴旋转的角度
android:saveEnabled设置为false,当该组件被冻结时不会保存其状态
android:scaleX设置该组件水平方向的缩放比
android:scaleY设置该组件垂直方向的缩放比
android:scrollX设置该组件初始化后的水平滚动条偏移
android:scrollY设置该组件初始化后垂直滚动条偏移
android:scrollbarAlwaysDrawHorizontalTrack设置该组件是否显示水平滚动条的轨迹
android:scrollbarAlwaysDrawVerticalTrack设置该组件是否显示垂直滚动条的轨迹
android:scrollbarDefaultDelayBeforeFade设置滚动条在淡出隐藏之前延迟多少毫秒
android:scrollbarFadeDuration设置滚动条淡出隐藏需要多少秒
android:scrollbarSize设置垂直滚动条的宽度和水平滚动条的高度
android:scrollbarStyle设置滚动条的风格和位置:insideOverlay
android:scrollThumbHorizontal设置该组件水平滚动滑块对对应的Drawable对象
android:scrollThumbVertical设置该组件垂直滚动滑块对对应的Drawable对象
android:scrollTrackbHorizontal设置该组件水平滚动轨道对对应的Drawable对象
android:scrollTrackbVertical设置该组件垂直滚动轨道对对应的Drawable对象
android:scrollbar设置该组件滚动时显示几个滚动条:none horizontal,vertical
android:soundEffectsEnabled设置该组件被单击时是否使用音效
android:tag为组件设置一个字符串tag值,可以通过view的getTag 获取字符串,或通过findViewByTag查找该组件
android:transformPivotX设置该组件旋转时旋转中心的X坐标
android:transformPivotY设置该组件旋转时旋转中心的Y坐标
android:translationX设置该组件在x方向上的位移
android:translationY设置该组件在Y方向上的位移
android:visibility设置该组件是否可见

android:id 属性 

android:id 属性是在 Android 中用于为视图(View)或布局(ViewGroup)指定一个唯一标识符的属性。每个 View 或 ViewGroup 都可以通过该属性在代码中被唯一地引用。

以下是 android:id 的基本用法:

1、在 XML 中设置唯一标识符:

<Button
    android:id="@+id/myButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Click me" />

这里 @+id/myButton 表示创建一个新的 ID,它被命名为 myButton。@+id/ 表示要创建一个新的 ID,而 myButton 是这个 ID 的名称。如果这个 ID 在同一 XML 文件中已经存在,可以使用 @id/ 进行引用。 

2、在代码中引用 ID:

Button button = findViewById(R.id.myButton);

这里 R.id.myButton 是通过代码引用在 XML 中定义的按钮的唯一 ID。

android:id 的作用包括:

  1. 标识视图: 为了在代码中能够找到和引用一个具体的视图,需要使用 android:id 为其分配一个唯一标识符。
  2. 事件处理: 在处理用户交互时,例如单击按钮时,通过 ID 来区分不同的视图,从而执行相应的操作。
  3. 布局操作: 在动态修改布局或处理视图层次结构时,ID 用于找到并操作特定的视图或布局。

确保为每个需要在代码中引用的视图分配一个唯一的 android:id,以便在运行时能够方便地进行操作和处理。

Android ViewGroup

android.view.ViewGroup

1、继承关系:

  • ViewGroup 是 View 的子类,因此它继承了一些 View 类的通用属性和方法。这意味着 ViewGroup 本身可以被当作普通的 View 使用,但由于它是一个抽象类,不能被直接实例化。

2、抽象类:

  • ViewGroup 是一个抽象类,它提供了一些基础的布局机制,但需要通过它的具体子类来实现特定的布局逻辑。每个具体的 ViewGroup 子类都定义了不同的排列和布局方式,例如 LinearLayout、RelativeLayout、FrameLayout 等。

3、布局参数:

  • 布局参数是通过 ViewGroup.LayoutParams 和 ViewGroup.MarginLayoutParams 这两个内部类来实现的。这些类包含了一系列的属性,用于指定子视图在容器中的位置、大小以及边距等信息。

4、XML 属性:

  • ViewGroup 的子类通常会提供一些特定的 XML 属性,用于调整布局。例如,LinearLayout 提供了 android:orientation 属性来定义子视图的排列方向,RelativeLayout 提供了一系列与相对位置有关的属性等。

通过使用 ViewGroup 和其子类,开发者可以创建复杂的布局结构,控制子视图的相对位置和大小,以及通过 XML 属性调整布局的外观和行为。这种灵活性使得 Android 应用可以适应不同屏幕尺寸和设备,并提供一致且美观的用户界面。

ViewGroup.LayoutParams

ViewGroup.LayoutParams 所支持的两个 xml 属性

xml 属性说明
android:layout_height指定该子组件的布局高度,值可以是
fill_parent
match_parent
wrap_parent
android:layout_width指定该子组件的布局宽度,值可以是
fill_parent
match_parent
wrap_parent

ViewGroup.MarginLayoutParams

ViewGroup.MarginLayoutParams 控制子组件周围的页边距

xml 属性说明
android:layout_marginBottom指定该子组件下边的页边距
android:layout_marginLeft指定该子组件左边的页边距
android:layout_marginRight指定该子组件右边的页边距
android:layout_marginTop指定该子组件上边的页边距

ViewGroup 重要的子类

1、AbsoluteLayout(绝对布局):

  • AbsoluteLayout 允许子视图按照指定的坐标(左上角为原点)放置在容器中。尽管它提供了精确的定位,但由于其不灵活、难以适应不同屏幕大小的特性,已经被弃用。推荐使用其他布局替代。

2、FrameLayout(帧布局):

  • FrameLayout 是一个简单的布局,用于将子视图叠放在一起。通常用于单个子视图,例如用于显示单个图片或视图。最后添加的子视图将覆盖之前添加的视图。

3、GridLayout(表格布局):

  • GridLayout 允许子视图在表格中排列,以行和列的形式。每个子视图可以占据一个或多个表格单元格。它适用于创建复杂的表格式布局。

4、LinearLayout(线性布局):

  • LinearLayout 在水平或垂直方向上排列子视图,可以使用 android:orientation 属性指定方向。它是最简单和常用的布局,适合于简单的界面排列。

5、RelativeLayout(相对布局):

  • RelativeLayout 允许子视图相对于其父容器或其他子视图进行定位。使用相对位置关系,可以创建复杂的布局结构。它适用于需要灵活控制子视图相对位置的情况。

这些布局类可以根据应用的需求进行选择和组合,以构建出灵活、响应式的用户界面。在实际开发中,通常会根据具体场景选择不同的布局来实现所需的界面结构。

Android Units 单位

Android UI 设计过程中给 UI 控件添加宽高和定位都需要用到距离,用到距离难免就要用到丈量的单位

1、dp(设备独立像素):

  • dp 是一种相对于屏幕密度无关的尺寸单位。在不同屏幕密度的设备上,1dp 会映射到不同数量的物理像素,以保持 UI 元素的一致性。它是在 Android 开发中推荐使用的单位,特别适用于设置控件的宽度、高度和边距等。

2、px(像素):

  • px 是屏幕上的物理像素。1px 对应设备屏幕上的一个物理像素。这个单位通常在需要固定尺寸的情况下使用,但在不同密度的屏幕上可能会导致显示效果不一致。

3、pt(磅):

  • pt 是一个标准的长度单位,通常用于印刷业。1pt 等于 1/72 英寸。在 Android 开发中,使用 pt 的情况较少,因为屏幕尺寸通常不同于打印设备。

4、sp(可缩放像素):

  • sp 专门用于文本大小,与 dp 类似。主要的区别在于,用户可以在系统设置中调整文本大小的偏好。这使得应用能够根据用户的喜好来缩放文本,提供更好的可读性。

这些单位允许开发者以相对独立于屏幕密度的方式来指定尺寸,从而使得应用程序在不同的设备上保持一致的外观和用户体验。选择合适的单位取决于设计的需要和用户体验的考虑。

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

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

相关文章

Redis核心技术与实战【学习笔记】 - 19.Pika:基于SSD实现大容量“Redis”

前言 随着业务数据的增加&#xff08;比如电商业务中&#xff0c;随着用户规模和商品数量的增加&#xff09;&#xff0c;就需要 Redis 能保存更多的数据。你可能会想到使用 Redis 切片集群&#xff0c;把数据分散保存到不同的实例上。但是这样做的话&#xff0c;如果要保存的…

java社区养老年人服务系统springboot+vue

为了帮助用户更好的了解和理解程序的开发流程与相关内容&#xff0c;本文将通过六个章节进行内容阐述。 第一章&#xff1a;描述了程序的开发背景&#xff0c;程序运用于现实生活的目的与意义&#xff0c;以及程序文档的结构安排信息&#xff1b; 第二章&#xff1a;描述了程序…

uniapp 高德地图显示

1. uniapp 高德地图显示 使用前需到**高德开放平台&#xff08;https://lbs.amap.com/&#xff09;**创建应用并申请Key   登录 高德开放平台&#xff0c;进入“控制台”&#xff0c;如果没有注册账号请先根据页面提示注册账号   打开 “应用管理” -> “我的应用”页面…

Leetcode 85. 最大矩形

题目信息 LeetoCode地址: 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目理解 该题是84题的升级版。84题给出了一个一维数组&#xff0c;即一行数据&#xff0c;每个元素是高度。而该题则是给出了二维数组&#xff0c;只需我们将每一行的高度…

太强了,AI数字人从制作到变现一次搞定

AI数字人从制作到变现 如果说GPT类大模型是我们人类的第二大脑&#xff0c;数字人就是我们人类在互联网上的第二个身体。随着 AI 的迅速发展&#xff0c;2024 年 AI 模型开始从大型语言模型向大型视觉模型转变。数字人技术作为其分支之一&#xff0c;正日益成为科技、娱乐、教…

【GAMES101】Lecture 14 15 辐射度量学

目录 辐射度量学 Radiant flux&#xff08;光通量&#xff09; intensity&#xff08;发光强度&#xff09; irradiance radiance 辐射度量学 主要讲述了物理学中的Basic radiometry (辐射度量学)&#xff0c;就是我们在之前的计算光照中没有用具体的物理单位去衡量和描述…

C++新特性 协程

本篇文章我们来讲述一下C协程 协程&#xff08;Coroutine&#xff09;是一种能够挂起个恢复的函数过程 是一种轻量级的并发编程方式&#xff0c;也称为用户级线程。它与传统的线程&#xff08;Thread&#xff09;相比&#xff0c;具有更低的开销和更高的执行效率。 协程通常运…

爬虫学习笔记-scrapy爬取汽车之家

1.终端运行scrapy startproject scrapy_carhome,创建项目 2.接口查找 3.终端cd到spiders,cd scrapy_carhome/scrapy_carhome/spiders,运行 scrapy genspider audi https://car.autohome.com.cn/price/brand-33.html 4.打开audi,编写代码,xpath获取页面车型价格列表 5.运行项目…

深度学习技巧应用35-L1正则化和L2正则在神经网络模型训练中的应用

大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用35-L1 正则化和L2正则在神经网络模型训练中的应用。L1正则化和L2正则化是机器学习中常用的两种正则化方法,用于防止模型过拟合并提高模型的泛化能力。这两种正则化方法通过在损失函数中添加惩罚项来控制模型的复杂性。…

面试八股文(4)

文章目录 1.sleep和wait区别2.为什么调用start()方法会执行run()方法&#xff0c;为什么不能直接调用run()方法3.synchronized关键字4.并发编程的三个重要特性5.synchronized和volatile关键字区别6.ThreadLocal7.为什么要用线程池&#xff1f;8.实现Runnable接口和Callable接口…

课时13:变量基础_变量场景

2.1.1 变量场景 学习目标 这一节&#xff0c; 我们从 数据存储、变量场景、小结 三个方面来学习。 数据存储 数据存储 所谓的数据存储&#xff0c;我们从三方面来理解这句话&#xff1a;1、数据保存到哪里 -- 各种媒介&#xff0c;CPU、内存、磁盘、磁带、网盘...2、数据保…

react+ts+antd-mobile 动态tabs➕下拉加载

1.初始化项目 //搭建项目 npm create vitelatest react-jike-mobile -- --template react-ts//安装依赖 npm i //运行 npm run dev清理项目目录结构 安装ant design mobile ant design mobile是ant design家族里专门针对于移动端的组件库 npm install --save antd-mobile测试…

日志报错 git -c dif.mnemonicprefix=false -c core.guotepath=false 解决方法

前言: 在进行下面操作前,必须确保,你是否安装了Git。 查看Git 在命令行窗口中输入`git --version`: 如果这个命令成功显示了Git的版本信息,这表明Git已经被安装。 1. 使用Sourcetree SourceTree 是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端…

C++核心deque容器,stack容器,queue容器,list容器,set容器,pair ,map容器

3.deque容器 1.deque容器的基本概念 Vector容器是单向开口的连续内存空间&#xff0c;deque则是一种双向开口的连续线性空间。所谓的双向开口&#xff0c;意思是可以在头尾两端插入元素&#xff0c;但是在其头部操作效率奇差&#xff0c;无法被接受。 deque容器和vector容器最…

MongoDB索引详情

文章目录 MongoDB索引MongoDB索引数据结构WiredTiger数据文件在磁盘的存储结构 索引的分类索引设计原则索引操作创建索引查看索引删除索引 索引类型单键索引&#xff08;Single Field Indexes&#xff09;复合索引&#xff08;Compound Index&#xff09;多键索引&#xff08;M…

学成在线:采用XXL-JOB任务调度方案使用FFmpeg处理视频转码业务

分片技术方案 概述 XXL-JOB并不直接提供数据处理的功能&#xff0c;它只会给所有注册的执行器分配好分片序号&#xff0c;在向执行器下发任务调度的同时携带分片总数和当前分片序号等参数 设计作业分片方案保证多个执行器之间不会查询到重复的任务,保证任务不会重复执行 任…

机器学习-基础分类算法-KNN详解

KNN-k近邻算法 k-Nearest Neighbors 思想极度简单应用数学只是少效果好可以解释机器学习算法使用过程中的很多细节问题更完整的刻画机器学习应用的流程 创建简单测试用例 import numpy as np import matplotlib.pyplot as plt raw_data_X [[3.393533211, 2.331273381],[3.1…

Flutter实现轮播图功能

一、在pubspec.yaml中添加&#xff1a; dependencies:# 轮播图card_swiper: ^3.0.1card_swiper: ^3.0.1&#xff0c;要获取最新版本&#xff1a;https://pub-web.flutter-io.cn/packages/card_swiper/versions&#xff0c;这个里面有文档可以看&#xff0c;如下图&#xff1a;…

大模型ReAct智能体开发实战

哆啦A梦是很多人都熟悉的角色&#xff0c;包括我自己。 在成长过程中&#xff0c;我常常对他口袋里的许多小玩意感到惊讶&#xff0c;而且他知道何时使用它们。 随着大型语言模型 (LLM) 的发展趋势&#xff0c;你也可以构建一个具有相同行为方式的模型&#xff01; 我们将构建…

高中数学立体几何练习题3

用到的基础知识&#xff1a; 1. 2.