01Android UI

1.1UI

  • 用户界面(User Interface,简称 UI,亦称使用者界面)是系统和用户之间进行交互和信息交换
    的媒介,它实现信息的内部形式与人类可以接受形式之间的转换。
  • 软件设计可分为两个部分:编码设计与UI设计。

1.2 Android UI

  • Android应用界面包含用户可查看并与之交互的所有内容。Android 提供丰富多样的预置 UI 组
    件,例如结构化布局对象和 UI 控件,您可以利用这些组件为您的应用构建图形界面。Android 还
    提供其他界面模块,用于构建特殊界面,例如对话框、通知和菜单。
  • Android UI 都是由布局和控件组成的

02 布局

布局(layout)可定义应用中的界面结构(例如 Activity 的界面结构)。布局中的所有元素均使用 View
和 ViewGroup 对象的层次结构进行构建。View 通常绘制用户可查看并进行交互的内容。然而,
ViewGroup 是不可见容器,用于定义 View 和其他 ViewGroup 对象的布局结构。

布局的结构

  • 定义界面布局的视图层次结构图示
  • View 对象通常称为“微件”,可以是众多子类之一,例如 ButtonTextView
  • ViewGroup 对象通常称为“布局”,可以是提供其他布局结构的众多类型之一,例如
    LinearLayoutConstraintLayout

2.2 声明布局

  • 在 XML 中声明界面元素,Android 提供对应 View 类及其子类的简明 XML 词汇,如用于微件和布
    局的词汇。

    您也可使用 Android Studio 的 Layout Editor,并采用拖放界面来构建 XML 布局

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity">
<TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World!"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

  • 在运行时实例化布局元素。您的应用可通过编程创建 View 对象和 ViewGroup 对象(并操纵其属
    性)。
ConstraintLayout constraintLayout = new ConstraintLayout(this);
TextView view = new TextView(this);
view.setText("Hello World!");
constraintLayout.addView(view);
  • 提示 : 使用 Layout Inspector 调试布局,可以查看通过代码创建的布局
  • 在连接的设备或模拟器上[运行您的应用]。
  • 依次点击 Tools > Layout Inspector。
  • 在显示的 Choose Process 对话框中,选择要检查的应用进程,然后点击 OK。

2.3 编写XML

  • 利用 Android 的 XML 词汇,按照在 HTML 中创建包含一系列嵌套元素的网页的相同方式快速设计
    UI 布局及其包含的屏幕元素
  • 每个布局文件都必须只包含一个根元素,并且该元素必须是视图对象或 ViewGroup 对象
  • 定义根元素后,可以子元素的形式添加其他布局对象或控件,从而逐步构建定义布局的视图层次结
  • 在 XML 中声明布局后,以 .xml 扩展名将文件保存在Android 项目的 res/layout/ 目录中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" >
<TextView android:id="@+id/text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello, I am a TextView" />
<Button android:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello, I am a Button" />
</LinearLayout>

2.4 加载 XML 资源

  • 当编译应用时,系统会将每个 XML 布局文件编译成 View 资源。在 Activity.onCreate() 回调
    内,通过调用 setContentView() ,并以 R.layout.layout_file_name 形式向应用代码传
    递布局资源的引用 ,加载应用代码中的布局资源。
@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);
}

2.5 属性

每个 View 对象和 ViewGroup 对象均支持自己的各种 XML 属性 。某些属性是 View 对象的特有
属性(例如,TextView 支持 textSize 属性),但可扩展此类的任一 View 对象也会继承这些属
性。某些属性是所有 View 对象的共有属性,因为它们继承自 View 根类(例如 id 属性)。此
外,其他属性被视为“布局参数”,即描述 View 对象特定布局方向的属性,如由该对象的父
ViewGroup 对象定义的属性。
<TextViewandroid:id="@+id/tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World!"android:textSize="24sp"/>
<Buttonandroid:id="@+id/btn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="按钮"/>

2.6 ID

任何 View 对象均可拥有与之关联的整型 ID,用于在结构树中对 View 对象进行唯一标识。编译应
用后,系统会以整型形式引用此 ID,但在布局 XML 文件中,系统通常会以字符串的形式在 id
属性中指定该 ID。这是所有 View 对象共有的 XML 属性(由 View 类定义),并且您会经常使
用该属性。
  • XML 标记内部的 ID 语法是:
android:id="@+id/tv"
  • 字符串开头处的 @ 符号指示 XML 解析器应解析并展开 ID 字符串的其余部分,并将其标识为 ID 资
    源。加号 (+) 表示这是一个新的资源名称,必须创建该名称并将其添加到我们的资源(在 R.java
    文件中)内。Android 框架还提供许多其他 ID 资源。引用 Android 资源 ID 时,不需要加号,但
    必须添加 android 软件包命名空间
android:id="@android:id/empty"
  • 添加 android 软件包命名空间后,我们现在将从 android.R 资源类而非本地资源类引用 ID

    • R.java 文件

tips: @+id 和 @id区别:
其实@+id就是在R.java文件里新增一个id名称,如果之前已经存在相同的id名称,那么会覆盖之
前的名称。而@id则是直接引用R.java文件的存在的id资源,如果不存在,会编译报错。

  • 注意: ID 字符串名称,在同一布局中必须是唯一的,不能重名,不同布局中可以同名;
  • 通过ID值创建我们视图对象的实例
<TextViewandroid:id="@+id/tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World!"android:textSize="24sp"/>
TextView textView = (TextView) findViewById(R.id.tv);

2.7 布局参数 LayoutParams

layout_*** 的布局属性

<TextViewandroid:layout_width="100dp"android:layout_height="200dp"android:layout_marginLeft="10dp" //左边距android:layout_marginTop="10dp" //上边距android:text="Hello World!" />
  • 布局参数作用是给我们的视图设定在布局中位置和大小
  • ViewGroup 类会实现一个扩展 ViewGroup.LayoutParams 的嵌套类,里面包含一些设置视图
    view 的尺寸和位置的属性。

    • 视图层次结构图,包含每个视图关联的布局参数:
TextView tv = new TextView(this);
LinearLayout linearLayout = new LinearLayout(this);
LinearLayout.LayoutParams layoutParams =
(LinearLayout.LayoutParams)tv.getLayoutParams();
layoutParams.leftMargin = 30; //左边距
layoutParams.topMargin = 30;//上边距
layoutParams.width = 100;//宽
layoutParams.height = 200;//高
tv.setLayoutParams(layoutParams);
linearLayout.addView(tv);
  • 一般而言,建议不要使用绝对单位(如像素)来指定布局宽度和高度。更好的方法是使用相对测量
    单位(如与密度无关的像素单位 (dp)wrap_contentmatch_parent ),因为其有助于确
    保您的应用在各类尺寸的设备屏幕上正确显示。

    • wrap_content 指示您的视图将其大小调整为内容所需的尺寸
    • match_parent 指示您的视图尽可能采用其父视图组所允许的最大尺寸。

2.8 布局位置

  • 视图可以通过调用 getLeft() 方法和 getTop() 方法来获取视图的坐标位置 ,也可以通过
    getWidth()getHeight() 获取视图的尺寸,这些方法返回的值是相对于其父视图的位置。
  • 位置和尺寸的单位是像素( px )
  • px 与 dp 区别
    • px 即像素,1px代表屏幕上一个物理的像素点;

      • 给视图设置px单位,不同分辨率下,尺寸不一样
    • dp (dip) Density independent pixels ,设备无关像素。它与“像素密度”密切相关 ;
      dpi像素密度: 每英寸包含的像素数

假设有一部手机,屏幕的物理尺寸为1.5英寸x2英寸,屏幕分辨率为240x320,则我们
可以计算出在这部手机的屏幕上,每英寸包含的像素点的数量为240/1.5=160dpi(横
向)或320/2=160dpi(纵向),160dpi就是这部手机的像素密度,像素密度的单位
dpi是Dots Per Inch的缩写,即每英寸像素数量.

密度类型 代表的分辨率(px) 屏幕密度(dpi) 换算(px/dp) 比例
低密度(ldpi) 240x320 120 1dp=0.75px 3
中密度(mdpi 320x480 160 1dp=1px 4
高密度(hdpi) 480x800 240 1dp=1.5px 6
超高密度(xhdpi) 720x1280 320 1dp=2px 8
超超高密度 (xxhdpi 1080x1920 480 1dp=3px 12

2.9 内边距和外边距


Android UI 基础知识相关推荐

  1. 自定义UI 基础知识

    系列文章目录 HenCode报名链接:hencoder.ke.qq.com 自定义UI 基础知识 自定义UI 绘制饼图 自定义UI 圆形头像 自定义UI 自制表盘 自定义UI 简易图文混排 自定义UI ...

  2. 《Android UI基础教程》——1.2节Android 应用程序的基本结构

    本节书摘来自异步社区<Android UI基础教程>一书中的第1章,第1.2节Android 应用程序的基本结构,作者 [美]Jason Ostrander,更多章节内容可以访问云栖社区& ...

  3. 《Android UI基础教程》——2.1节创建一个应用

    本节书摘来自异步社区<Android UI基础教程>一书中的第2章,第2.1节创建一个应用,作者 [美]Jason Ostrander,更多章节内容可以访问云栖社区"异步社区&q ...

  4. Android UI基础 仿闲鱼发布页

    Android UI基础 仿闲鱼发布页 实现图: 源码地址: https://download.csdn.net/download/weixin_44758662/12819060 代码太长不好看 建 ...

  5. android培训总结范文,android培训基础知识总结

    android培训基础知识总结,有需要的朋友可以参考下. android培训之1. Android的四大组件是哪些,它们的作用? Activity:Activity是Android程序与用户交互的窗口 ...

  6. android系统知识,Android系统基础知识百科

    Android系统基础知识百科 2015-12-16 17:58:31 954浏览 Android系统作为一款功能强大的移动计算平台,在保持开放性的同时,必须提供强健的安全保障.Android的系统安 ...

  7. Android 动画基础知识学习(下)

    1.属性动画 属性动画可以对任意对象的属性进行动画不仅仅是View,动画默认时间间隔是300ms,默认帧率是100ms/帧. 作用:在一个时间间隔内完成对一个对象从属性值到另一个属性值的改变. 三个常 ...

  8. Android开发基础知识

    Android 开发 1. Android基础知识 1.1 发展历程 1.2 Android系统体系架构 Android采用分层架构: Kernel层:Android平台的基础.有线程管理和内存管理等 ...

  9. Android Systrace 基础知识(9)-MainThread 和 RenderThread 解读

    本文是 Systrace 系列文章的第九篇,主要是是介绍 Android App 中的 MainThread 和 RenderThread,也就是大家熟悉的「主线程」和「渲染线程」.文章会从 Syst ...

  10. Appium+python自动化(十五)- Android 这些基础知识,你知多少???(超详解)...

    简介 前边具体操作和实战已经讲解和分享了很多了,但是一些android的一些基础知识,你又知道多少了,你都掌握了吗?这篇就由宏哥给小伙伴们既是一个分享,又是对前边的一次总结.为什么要对这些做一个简单的 ...

最新文章

  1. webpack打包路径更改_扫盲: Webpack 从扫盲到手撸(上)
  2. 管人、管团队、管项目,如何让团队管理者成为技术团队中的发动机?
  3. SDUT-2132_数据结构实验之栈与队列二:一般算术表达式转换成后缀式
  4. python里graphics的使用_使用graphics.py实现2048小游戏
  5. 【youcans 的 OpenCV 例程 200 篇】112. 滤波反投影重建图像
  6. [C++] - 中的复制初始化(copy initialization)
  7. 容器安全 - 通过SECCOMP过滤在容器中的风险操作
  8. python网络爬虫学习笔记(三):urllib库的使用
  9. React Suite 组件库
  10. javascript常用函数集
  11. 一个网站的诞生- MagicDict开发总结1 [首页]
  12. 用结构化思维策划一个会议
  13. 队列,计算机中的排队模型
  14. 逻辑面试题:猴子搬香蕉
  15. vr全景接口_制作面向业务的VR接口
  16. Mac桌面个性贴纸Desktop Stickers
  17. 2021-02-26构造函数
  18. Flalsh Lighting Network(闪电网络)
  19. STM32基础(11)光敏传感
  20. 阿里云部署IPv4IPv6 双栈环境

热门文章

  1. “松鼠症”患者看过来 整理电子相册的秘笈都在这了
  2. 鏈接腳本、靜態庫、共享庫
  3. SwiftUI 内功教程之Closures 09 闭包捕捉价值Capturing Values及经典用法
  4. 李沐动手学深度学习V2-RNN循环神经网络原理
  5. 微信企业号开发,给用户推送信息
  6. PR剪辑-电子相册学习笔记
  7. 再谈自适应学习——技术篇
  8. MenuetOS-令人不可思议的64位操作系统!-第二辑
  9. SVG (SVG的概念 、SVG 实例 、SVG 在HTML中 、SVG 矩形 、SVG 圆形 、SVG 椭圆 、SVG 直线 、SVG 多边形、svg验证码 )
  10. Matlab之彩色图像映射表