Android入门-基础-Android UI 基础知识(四)

  • 了解Android UI
  • 布局
  • 常用UI控件
  • 写一个简单UI项目

01 Android UI

1.1 UI
用户界面(User Interface,简称 UI,亦称使用者界面)是系统和用户之间进行交互和信息交换
的媒介,它实现信息的内部形式与人类可以接受形式之间的转换。
软件设计可分为两个部分:编码设计与UI设计。
1.2 Android UI
Android应用界面包含用户可查看并与之交互的所有内容。Android 提供丰富多样的预置 UI 组
件,例如结构化布局对象和 UI 控件,您可以利用这些组件为您的应用构建图形界面。Android 还
提供其他界面模块,用于构建特殊界面,例如对话框、通知和菜单。
Android UI 都是由布局和控件组成的
02 布局
布局(layout)可定义应用中的界面结构(例如 Activity 的界面结构)。布局中的所有元素均使用 View
和 ViewGroup 对象的层次结构进行构建。View 通常绘制用户可查看并进行交互的内容。然而,
ViewGroup 是不可见容器,用于定义 View 和其他 ViewGroup 对象的布局结构。
2.1 布局的结构
定义界面布局的视图在这里插入图片描述

  • View 对象通常称为“微件”,可以是众多子类之一,例如 Button 或 TextView 。
  • ViewGroup 对象通常称为“布局”,可以是提供其他布局结构的众多类型之一,例如 LinearLayout 或
    ConstraintLayout 。

2.2 声明布局

  • 在 XML 中声明界面元素,Android 提供对应 View 类及其子类的简明 XML 词汇,如用于微件和布 局的词汇。 您也可使用
    Android Studio 的 Layout Editor,并采用拖放界面来构建 XML 布局。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns: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">
<TextView
android: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 调试布局,可以查看通过代码创建的布局
  1. 在连接的设备或模拟器上[运行您的应用]。
  2. 依次点击 Tools > Layout Inspector。
  3. 在显示的 Choose Process 对话框中,选择要检查的应用进程,然后点击 OK。
    2.3 编写XML
    利用 Android 的 XML 词汇,按照在 HTML 中创建包含一系列嵌套元素的网页的相同方式快速设计
    UI 布局及其包含的屏幕元素
    每个布局文件都必须只包含一个根元素,并且该元素必须是视图对象或 ViewGroup 对象
    定义根元素后,可以子元素的形式添加其他布局对象或控件,从而逐步构建定义布局的视图层次结

    在 XML 中声明布局后,以 .xml 扩展名将文件保存在Android 项目的 res/layout/ 目录中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns: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.*    @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 对象定义的属性。

<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:textSize="24sp"/>
<Button
android: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:1 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值创建我们视图对象的实例

<TextView
android: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

<TextView
android: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_content 或 match_parent ),因为其有助于确
保您的应用在各类尺寸的设备屏幕上正确显示。
wrap_content 指示您的视图将其大小调整为内容所需的尺寸。
match_parent 指示您的视图尽可能采用其父视图组所允许的最大尺寸。
2.8 布局位置
在这里插入图片描述
03 常用布局
3.1 线性布局 - LinearLayout
LinearLayout 是一个视图容器,用于使所有子视图在单个方向(垂直或水平)保持对齐。您可
使用 android:orientation 属性指定布局方向。

android:orientation="horizontal"

在这里插入图片描述
布局权重android:layout_weight
通过给子视图设置权重值,来分配子视图所占空间的权重(比例),如图三个子视图权重分别设置
为1,均分页面空间
3.2 相对布局 - RelativeLayout
相对布局 :子视图可通过相应的布局属性,设定相对于另一个兄弟视图或父视图容器的相对位置
属性说明:
相对于兄弟元素
在这里插入图片描述
在这里插入图片描述

3.3 帧布局 - FrameLayout
最简单的一种布局,没有任何定位方式,当我们往里面添加控件的时候,会默认把他们放到这块区
域的左上角,帧布局的大小由控件中最大的子控件决定,如果控件的大小一样大的话,那么同一时
刻就只能看到最上面的那个组件,后续添加的控件会覆盖前一个在这里插入图片描述
3.4 网格布局 GridLayout
名称 含义
android: columnCount 列数
android: rowCount 行数
android layout_columnSpan 横跨的列数
android: layout_rowSpan 横跨的行数

猜你喜欢

转载自blog.csdn.net/qq_43030934/article/details/109739239
今日推荐