HarmonyOS学习第12天:解锁表格布局的奥秘
表格布局初相识

不知不觉,我们在 HarmonyOS 的学习旅程中已经走到了第 12 天。在之前的学习里,我们逐步掌握了 HarmonyOS 开发的各种基础与核心技能,比如组件的基本使用、布局的初步搭建等,这些知识就像一块块基石,为我们构建强大应用程序奠定了基础。今天,我们将迎来一个新的重要布局方式 —— 表格布局(TableLayout)。
在许多应用场景中,我们常常需要以表格形式展示数据,比如财务报表展示收入支出数据、课程表呈现课程安排、员工信息表罗列员工的各项信息等。在这些情况下,表格布局就显得尤为重要。它能够让数据以一种整齐、结构化的方式呈现,方便用户快速浏览和对比信息 ,极大地提升了数据展示的效率与用户体验。接下来,就让我们深入了解表格布局的使用方式。
搭建表格框架

(一)创建基础表格
在 HarmonyOS 中,使用<TableLayout>标签来创建表格布局。其基本语法如下:
| <TableLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="match_parent" ohos:width="match_parent"> <!-- 这里放置表格的内容,如行、列及组件 --> </TableLayout> |
在上述代码中,xmlns:ohos是命名空间声明,用于指定 HarmonyOS 的资源标识符。ohos:height和ohos:width属性分别设置表格布局的高度和宽度,这里设置为match_parent,表示表格将填充父容器的整个空间。
接下来,我们通过一个简单的示例来展示如何创建一个包含文本组件的表格。假设我们要创建一个简单的 2x2 表格,每个单元格中放置一个文本:
| <TableLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="match_parent" ohos:width="match_parent"> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="1" ohos:text_size="20fp" /> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="2" ohos:text_size="20fp" /> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="3" ohos:text_size="20fp" /> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="4" ohos:text_size="20fp" /> </TableLayout> |
在这个示例中,我们在<TableLayout>中添加了四个<Text>组件。每个<Text>组件设置了高度和宽度为wrap_content,表示根据文本内容自适应大小,同时设置了文本内容和字体大小。运行该代码,即可看到一个简单的表格,其中文本按顺序排列在表格的单元格中 。
(二)设置行列属性
在<TableLayout>中,可以通过ohos:row_count和ohos:column_count属性来设置表格的行数和列数。例如,要创建一个 3 行 4 列的表格,可以这样设置:
| <TableLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="match_parent" ohos:width="match_parent" ohos:row_count="3" ohos:column_count="4"> <!-- 这里放置表格的内容,如行、列及组件 --> </TableLayout> |
当设置了行数和列数后,放置在<TableLayout>中的组件会按照行列顺序依次填充单元格。如果组件数量小于单元格数量,多余的单元格将为空;如果组件数量大于单元格数量,多余的组件将根据布局规则进行显示 。
下面我们通过不同的代码示例来展示设置不同行列数的效果。
示例一:2 行 2 列的表格
| <TableLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="match_parent" ohos:width="match_parent" ohos:row_count="2" ohos:column_count="2"> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="A" ohos:text_size="20fp" /> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="B" ohos:text_size="20fp" /> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="C" ohos:text_size="20fp" /> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="D" ohos:text_size="20fp" /> </TableLayout> |
在这个示例中,四个<Text>组件会依次填充 2 行 2 列的四个单元格,形成一个规整的表格。
示例二:1 行 5 列的表格
| <TableLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="match_parent" ohos:width="match_parent" ohos:row_count="1" ohos:column_count="5"> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="1" ohos:text_size="20fp" /> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="2" ohos:text_size="20fp" /> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="3" ohos:text_size="20fp" /> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="4" ohos:text_size="20fp" /> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="5" ohos:text_size="20fp" /> </TableLayout> |
此示例中,五个<Text>组件会排列在同一行的五个单元格中,形成一个单行多列的表格效果。通过这些示例,我们可以清晰地看到ohos:row_count和ohos:column_count属性对表格布局的影响,根据实际需求灵活设置行列数,为后续在表格中放置各种组件奠定基础。
填充表格内容
(一)添加行与列
在<TableLayout>中,通过直接添加组件来形成行和列的结构。每个组件默认占据一个单元格,组件会按照添加的顺序依次填充表格的单元格。例如,我们要创建一个简单的 3x3 的表格,每个单元格放置一个按钮,代码如下:
| <TableLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="match_parent" ohos:width="match_parent" ohos:row_count="3" ohos:column_count="3"> <Button ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="按钮1" ohos:text_size="18fp" /> <Button ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="按钮2" ohos:text_size="18fp" /> <Button ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="按钮3" ohos:text_size="18fp" /> <Button ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="按钮4" ohos:text_size="18fp" /> <Button ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="按钮5" ohos:text_size="18fp" /> <Button ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="按钮6" ohos:text_size="18fp" /> <Button ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="按钮7" ohos:text_size="18fp" /> <Button ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="按钮8" ohos:text_size="18fp" /> <Button ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="按钮9" ohos:text_size="18fp" /> </TableLayout> |
在上述代码中,我们在<TableLayout>标签内依次添加了九个<Button>组件 。由于设置了ohos:row_count="3"和ohos:column_count="3",这些按钮会按照 3 行 3 列的方式排列在表格中。运行代码后,即可看到一个整齐的 3x3 按钮表格。
如果需要在表格中添加不同类型的组件,比如文本、图片、输入框等,也可以按照同样的方式进行添加。例如,创建一个包含文本和图片的表格:
| <TableLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="match_parent" ohos:width="match_parent" ohos:row_count="2" ohos:column_count="2"> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="姓名" ohos:text_size="20fp" /> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="年龄" ohos:text_size="20fp" /> <Image ohos:height="100vp" ohos:width="100vp" ohos:src_element="$media:icon" /> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="25" ohos:text_size="20fp" /> </TableLayout> |
在这个示例中,第一行的两个单元格分别放置了 “姓名” 和 “年龄” 文本,第二行的第一个单元格放置了一张图片(通过ohos:src_element指定图片资源),第二个单元格放置了年龄信息的文本。这样就创建了一个简单的数据展示表格,通过这种方式,可以根据实际需求灵活组合各种组件,构建出丰富多样的表格布局。
(二)组件布局技巧
在表格布局中,还可以通过一些属性来控制组件在单元格内的布局,使表格更加美观和符合需求。常见的属性有ohos:layout_alignment、ohos:padding、ohos:margin等。
ohos:layout_alignment属性用于设置组件在单元格内的对齐方式,它有多个取值,如left(左对齐)、right(右对齐)、center(居中对齐)、top(顶部对齐)、bottom(底部对齐)等。例如,将按钮在单元格内居中对齐:
| <TableLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="match_parent" ohos:width="match_parent" ohos:row_count="2" ohos:column_count="2"> <Button ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="按钮1" ohos:text_size="18fp" ohos:layout_alignment="center" /> <Button ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="按钮2" ohos:text_size="18fp" ohos:layout_alignment="center" /> <Button ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="按钮3" ohos:text_size="18fp" ohos:layout_alignment="center" /> <Button ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="按钮4" ohos:text_size="18fp" ohos:layout_alignment="center" /> </TableLayout> |
在上述代码中,每个按钮都设置了ohos:layout_alignment="center",这样按钮在各自所在的单元格内会水平和垂直方向都居中显示,使表格看起来更加整齐美观。
ohos:padding属性用于设置组件内部的内边距,即组件内容与组件边框之间的距离。通过设置ohos:padding,可以调整组件内文本或图片与组件边缘的间距,使组件内容显示更加舒适。例如:
| <TableLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="match_parent" ohos:width="match_parent" ohos:row_count="1" ohos:column_count="2"> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="文本1" ohos:text_size="20fp" ohos:padding="10vp" /> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="文本2" ohos:text_size="20fp" ohos:padding="15vp" /> </TableLayout> |
在这个例子中,第一个文本组件设置了ohos:padding="10vp",表示其内容与边框四周的距离为 10vp;第二个文本组件设置了ohos:padding="15vp",内边距更大,这样可以直观地看到内边距对组件内容显示的影响,通过合理设置内边距,可以优化组件在单元格内的展示效果。
ohos:margin属性用于设置组件的外边距,即组件与其他组件之间的距离。它可以控制组件在表格中的相对位置,使表格布局更加灵活。例如:
| <TableLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="match_parent" ohos:width="match_parent" ohos:row_count="2" ohos:column_count="2"> <Button ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="按钮A" ohos:text_size="18fp" ohos:margin="5vp" /> <Button ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="按钮B" ohos:text_size="18fp" ohos:margin="10vp 5vp 10vp 5vp" /> <Button ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="按钮C" ohos:text_size="18fp" ohos:margin="5vp 10vp" /> <Button ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="按钮D" ohos:text_size="18fp" /> </TableLayout> |
在这段代码中,第一个按钮设置了ohos:margin="5vp",表示其与四周其他组件的距离均为 5vp;第二个按钮设置了ohos:margin="10vp 5vp 10vp 5vp",分别表示上、右、下、左的外边距,即上和下外边距为 10vp,左和右外边距为 5vp;第三个按钮设置了ohos:margin="5vp 10vp",表示上外边距为 5vp,左右外边距为 10vp(下外边距默认为 0);第四个按钮未设置外边距。通过这些不同的外边距设置,可以看到按钮在表格中的位置发生了明显变化,合理运用外边距属性能够精确控制组件在表格中的布局,满足各种复杂的布局需求。
表格布局实战
(一)数据展示案例
下面我们通过一个实际的学生成绩表案例,更深入地展示表格布局在展示复杂数据时的强大功能。假设我们要展示一个包含学生姓名、语文成绩、数学成绩和英语成绩的表格。
首先,在布局文件中创建表格结构:
| <TableLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="match_parent" ohos:width="match_parent" ohos:row_count="5" ohos:column_count="4"> <!-- 表头部分 --> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="姓名" ohos:text_size="20fp" ohos:background_element="#F0F0F0" ohos:layout_alignment="center" /> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="语文" ohos:text_size="20fp" ohos:background_element="#F0F0F0" ohos:layout_alignment="center" /> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="数学" ohos:text_size="20fp" ohos:background_element="#F0F0F0" ohos:layout_alignment="center" /> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="英语" ohos:text_size="20fp" ohos:background_element="#F0F0F0" ohos:layout_alignment="center" /> <!-- 数据行部分 --> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="张三" ohos:text_size="18fp" ohos:layout_alignment="center" /> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="85" ohos:text_size="18fp" ohos:layout_alignment="center" /> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="90" ohos:text_size="18fp" ohos:layout_alignment="center" /> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="88" ohos:text_size="18fp" ohos:layout_alignment="center" /> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="李四" ohos:text_size="18fp" ohos:layout_alignment="center" /> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="78" ohos:text_size="18fp" ohos:layout_alignment="center" /> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="85" ohos:text_size="18fp" ohos:layout_alignment="center" /> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="92" ohos:text_size="18fp" ohos:layout_alignment="center" /> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="王五" ohos:text_size="18fp" ohos:layout_alignment="center" /> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="90" ohos:text_size="18fp" ohos:layout_alignment="center" /> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="88" ohos:text_size="18fp" ohos:layout_alignment="center" /> <Text ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="95" ohos:text_size="18fp" ohos:layout_alignment="center" /> </TableLayout> |
在上述代码中,我们首先设置了表格的行数为 5,列数为 4 。前四行的文本组件构成了表头,通过设置ohos:background_element="#F0F0F0"来改变表头的背景颜色,使其与数据行区分开来,同时设置ohos:layout_alignment="center"使表头文本居中显示。从第五行开始,每四行文本组件为一组,构成一个学生的数据行,展示学生的姓名和各科成绩。通过这样的方式,我们创建了一个简单而清晰的学生成绩表。运行代码后,即可看到一个整齐排列的成绩表格,用户可以方便地查看每个学生的成绩信息。
(二)交互功能实现
在实际应用中,表格不仅仅是展示数据,还常常需要与用户进行交互。例如,为表格组件添加点击事件,当用户点击某个单元格时,获取该单元格的数据并进行相应处理。下面我们通过代码示例来展示如何实现这一功能。
假设我们在上述学生成绩表的基础上,为每个单元格添加点击事件,当点击单元格时,弹出一个提示框显示该单元格的数据。首先,在布局文件中为每个需要添加点击事件的组件(这里是每个<Text>组件)设置ohos:id属性,以便在代码中获取并设置点击事件:
| <TableLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="match_parent" ohos:width="match_parent" ohos:row_count="5" ohos:column_count="4"> <!-- 表头部分 --> <Text ohos:id="$+id:header_name" ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="姓名" ohos:text_size="20fp" ohos:background_element="#F0F0F0" ohos:layout_alignment="center" /> <Text ohos:id="$+id:header_chinese" ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="语文" ohos:text_size="20fp" ohos:background_element="#F0F0F0" ohos:layout_alignment="center" /> <Text ohos:id="$+id:header_math" ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="数学" ohos:text_size="20fp" ohos:background_element="#F0F0F0" ohos:layout_alignment="center" /> <Text ohos:id="$+id:header_english" ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="英语" ohos:text_size="20fp" ohos:background_element="#F0F0F0" ohos:layout_alignment="center" /> <!-- 数据行部分 --> <Text ohos:id="$+id:name_zhang" ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="张三" ohos:text_size="18fp" ohos:layout_alignment="center" /> <Text ohos:id="$+id:chinese_zhang" ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="85" ohos:text_size="18fp" ohos:layout_alignment="center" /> <Text ohos:id="$+id:math_zhang" ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="90" ohos:text_size="18fp" ohos:layout_alignment="center" /> <Text ohos:id="$+id:english_zhang" ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="88" ohos:text_size="18fp" ohos:layout_alignment="center" /> <Text ohos:id="$+id:name_li" ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="李四" ohos:text_size="18fp" ohos:layout_alignment="center" /> <Text ohos:id="$+id:chinese_li" ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="78" ohos:text_size="18fp" ohos:layout_alignment="center" /> <Text ohos:id="$+id:math_li" ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="85" ohos:text_size="18fp" ohos:layout_alignment="center" /> <Text ohos:id="$+id:english_li" ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="92" ohos:text_size="18fp" ohos:layout_alignment="center" /> <Text ohos:id="$+id:name_wang" ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="王五" ohos:text_size="18fp" ohos:layout_alignment="center" /> <Text ohos:id="$+id:chinese_wang" ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="90" ohos:text_size="18fp" ohos:layout_alignment="center" /> <Text ohos:id="$+id:math_wang" ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="88" ohos:text_size="18fp" ohos:layout_alignment="center" /> <Text ohos:id="$+id:english_wang" ohos:height="wrap_content" ohos:width="wrap_content" ohos:text="95" ohos:text_size="18fp" ohos:layout_alignment="center" /> </TableLayout> |
然后,在对应的 Java 代码中获取这些组件并设置点击事件:
| import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; import ohos.agp.components.Component; import ohos.agp.components.Text; import ohos.agp.window.dialog.ToastDialog; public class MainAbilitySlice extends AbilitySlice { @Override public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_ability_main); // 获取表头组件并设置点击事件 Text headerName = (Text) findComponentById(ResourceTable.Id_header_name); headerName.setClickedListener(new Component.ClickedListener() { @Override public void onClick(Component component) { new ToastDialog(getContext()).setText("点击了表头:姓名").show(); } }); Text headerChinese = (Text) findComponentById(ResourceTable.Id_header_chinese); headerChinese.setClickedListener(new Component.ClickedListener() { @Override public void onClick(Component component) { new ToastDialog(getContext()).setText("点击了表头:语文").show(); } }); // 以此类推,为其他表头组件设置点击事件 // 获取数据行组件并设置点击事件 Text nameZhang = (Text) findComponentById(ResourceTable.Id_name_zhang); nameZhang.setClickedListener(new Component.ClickedListener() { @Override public void onClick(Component component) { new ToastDialog(getContext()).setText("点击了单元格:张三").show(); } }); Text chineseZhang = (Text) findComponentById(ResourceTable.Id_chinese_zhang); chineseZhang.setClickedListener(new Component.ClickedListener() { @Override public void onClick(Component component) { new ToastDialog(getContext()).setText("点击了单元格:85").show(); } }); // 以此类推,为其他数据行组件设置点击事件 } @Override public void onActive() { super.onActive(); } @Override public void onForeground(Intent intent) { super.onForeground(intent); } } |
在上述代码中,我们通过findComponentById方法获取每个<Text>组件,并使用setClickedListener方法为其设置点击事件。在点击事件的回调函数中,创建一个ToastDialog对象,将点击的单元格数据作为提示信息显示出来。这样,当用户点击表格中的任意单元格时,都能获取到该单元格的数据并通过提示框展示,实现了表格与用户之间的交互功能。通过这种方式,可以根据实际需求对点击单元格的数据进行更复杂的处理,如跳转到详细信息页面、进行数据编辑等 。
总结与展望
通过今天的学习,我们全面了解了 HarmonyOS 中表格布局(TableLayout)的使用方式。从创建基础表格框架,到设置行列属性,再到填充各种组件以及实现交互功能,表格布局为我们在 HarmonyOS 应用开发中展示数据提供了一种高效、直观的方式 。它能够使复杂的数据以整齐、有序的表格形式呈现,大大提升了用户获取信息的效率。
希望大家能够将今天所学的表格布局知识运用到实际项目中,通过不断练习和实践,熟练掌握其使用技巧。在后续的学习中,我们还将探索更多 HarmonyOS 的布局知识,如更加灵活的弹性布局、适用于复杂界面的相对布局等,它们将为我们的应用开发带来更多的可能性,让我们一起期待并继续深入学习吧!
相关文章:
HarmonyOS学习第12天:解锁表格布局的奥秘
表格布局初相识 不知不觉,我们在 HarmonyOS 的学习旅程中已经走到了第 12 天。在之前的学习里,我们逐步掌握了 HarmonyOS 开发的各种基础与核心技能,比如组件的基本使用、布局的初步搭建等,这些知识就像一块块基石,为我…...
【心得】一文梳理高频面试题 HTTP 1.0/HTTP 1.1/HTTP 2.0/HTTP 3.0的区别并附加记忆方法
面试时很容易遇到的一个问题—— HTTP 1.0/HTTP 1.1/HTTP 2.0/HTTP 3.0的区别,其实这四个版本的发展实际上是一环扣一环的,是逐步完善的,本文希望帮助读者梳理清楚各个版本之间的区别,并且给出当前各个版本的应用情况,…...
《Python实战进阶》No 11:微服务架构设计与 Python 实现
第11集:微服务架构设计与 Python 实现 2025年3月3日更新了代码和微服务运行后的系统返回信息截图,所有代码在 python3.11.5虚拟环境下运行通过。 微服务架构通过将复杂应用拆分为独立部署的小型服务,显著提升了系统的可扩展性和维护性。本集…...
电商平台项目需求文档(精简版)
以下是电商平台项目需求文档样例(精简版),包含核心功能模块和技术实现要求: 电商平台项目需求文档 一、项目概述 项目名称:ECP-全栈电商平台(ECP - E-Commerce Platform) 技术定位:…...
Android15 Camera HAL Android.bp中引用Android.mk编译的libB.so
背景描述 Android15 Camera HAL使用Android.bp脚本来构建系统。假设Camera HAL中引用了另外一个HAL实现的so (例如VPU HAL), 恰巧被引用的这个VPU HAL so是用Android.mk构建的,那Camera HAL Android.bp在直接引用这个Android.mk编…...
P8720 [蓝桥杯 2020 省 B2] 平面切分--set、pair
P8720 [蓝桥杯 2020 省 B2] 平面切分--set、pair 题目 分析一、pair1.1pair与vector的区别1.2 两者使用场景两者组合使用 二、set2.1核心特点2.2set的基本操作2.3 set vs unordered_set示例:统计唯一单词数代码 题目 分析 大佬写的很明白,看这儿 我讲讲…...
postgresql源码学习(60)—— VFD的作用及机制
首先VFD是Virtual File Descriptor,即虚拟文件描述符,既然是虚拟的,一定先有物理的。 一、 物理文件描述符(File Descriptor, FD) 1. 什么是 FD 它是操作系统提供给用户程序访问和操作文件或其他 I/O 资源的抽象接口…...
【CSS—前端快速入门】CSS 选择器
CSS 1. CSS介绍 1.1 什么是CSS? CSS(Cascading Style Sheet),层叠样式表,用于控制页面的样式; CSS 能够对网页中元素位置的排版进行像素级精确控制,实现美化页面的效果;能够做到页面的样式和 结构分离; 1…...
Linux安装jdk,node,mysql,redis
准备工作: 1.安装VMware软件,下载CentOs7镜像文件,在VMware安装CentOs7 2.宿主机安装Xshell用来操作linux 3. .宿主机安装Xftp用来在宿主机和虚拟机的linux传输文件 案例1:在 /home/soft文件夹解压缩jdk17,并配置环…...
深度求索(DeepSeek)的AI革命:NLP、CV与智能应用的技术跃迁
Deepseek官网:DeepSeek 引言:AI技术浪潮中的深度求索 近年来,人工智能技术以指数级速度重塑全球产业格局。在这场技术革命中,深度求索(DeepSeek)凭借其前沿的算法研究、高效的工程化能力以及对垂直场景的…...
Minio搭建并在SpringBoot中使用完成用户头像的上传
Minio使用搭建并上传用户头像到服务器操作,学习笔记 Minio介绍 minio官网 MinIO是一个开源的分布式对象存储服务器,支持S3协议并且可以在多节点上实现数据的高可用和容错。它采用Go语言开发,拥有轻量级、高性能、易部署等特点,并且可以自由…...
【鸿蒙Next】 测试包 签名、打包、安装 整体过程记录
签名打包记录: HarmonyOS应用签名、打Hap包、Hap调试包真机安装步骤 https://blog.csdn.net/qq_34462735/article/details/135226332 测试包真机安装方式二 DevEco Testing 鸿蒙应用示例:DevEco Testing 工具的常用功能及使用场景 https://blog.csd…...
阿里云 | 快速在网站上增加一个AI助手
创建智能体应用 如上所示,登录阿里云百炼人工智能业务控制台,创建智能体应用,智能体应用是一个agent,即提供个人或者企业的代理或中间件组件应用,对接阿里云大模型公共平台,为个人或者企业用户提供大模型应…...
Raspberry Pi边缘计算网关设计与LoRa通信实现
Raspberry Pi边缘计算网关设计与LoRa通信实现 摘要第一章 绪论1.1 研究背景1.2 研究现状1.3 论文结构 第二章 相关技术理论2.1 边缘计算体系架构2.2 LoRa通信技术2.3 Raspberry Pi硬件生态 第三章 系统架构设计3.1 硬件架构设计3.2 软件架构设计3.3 混合通信协议设计 第四章 硬…...
原型链与继承
#搞懂还是得自己动手# 原型链 function Person(name) { this.name name; } Person.prototype.sayName function() { console.log(this.name); };const p new Person("Alice"); 原型链关系图: 原型链:person->Person.prototype->O…...
动态规划 ─── 算法5
动态规划(Dynamic Programming,简称 DP)是一种用于解决复杂问题的算法设计技术,特别适用于具有重叠子问题和最优子结构性质的问题。动态规划通过将问题分解为更小的子问题,并存储子问题的解来避免重复计算,…...
博客系统--测试报告
博客系统--测试报告 项目背景项目功能功能测试①登录功能测试②发布博客功能测试③删除文章功能测试④功能测试总结: 自动化测试自动化脚本执行界面: 性能测试 本博文主要针对个人实现的项目《博客系统》去进行功能测试、自动化测试、性能测试࿰…...
【博资考4】网安学院-硕转博考试内容
【博资考4】硕转博考试内容 - 网络安全与基础理论 写在最前面一. **21年硕转博面试内容回顾**网络、逆向、操作系统、攻防、漏洞1. **网络安全常见攻击方式及其防范措施**1.1 **DDoS攻击(分布式拒绝服务)**1.2 **SQL注入攻击**1.3 **XSS攻击(…...
GPT-4.5 怎么样?如何升级使用ChatGPTPlus/Pro? GPT-4.5设计目标是成为一款非推理型模型的巅峰之作
GPT-4.5 怎么样?如何升级使用ChatGPTPlus/Pro? GPT-4.5设计目标是成为一款非推理型模型的巅峰之作 今天我们来说说上午发布的GPT-4.5,接下来我们说说GPT4.5到底如何,有哪些功能?有哪些性能提升?怎么快速使用到GPT-4.…...
git命令学习记录
1. git reset 参数说明 git reset 是用来回退版本的,它可以添加三个参数,常用的使用格式是这样的:git reset [--hard | --soft | --mixed] 版本号 一般使用git修改文件并提交需要三步,第一步在文本编辑器中编辑文件,也…...
【HTML学习笔记基础篇】
HTML学习笔记基础篇 一、HTML概述1.1 什么是HTML1.2 HTML文档的基本结构 二、HTML基础标签2.1 标题标签2.2 段落标签2.3 换行标签2.4 链接标签2.6 列表标签2.7 表格标签 三、HTML进阶知识3.1 行级元素与块级元素3.3 语义化标签 四、开发工具与技巧4.1 开发工具4.2 常用技巧 五、…...
DeepSeek 开源周:第五天 - Fire-Flyer 文件系统(3FS)
(下面文字主要由 Grok 3 协助生成) 概述 Deepseek 今天开源的 Fire-Flyer 文件系统(3FS)是一个高性能分布式文件系统,专门为 AI 训练和推理设计。研究表明,它解决了 AI 工作负载中处理海量数据的高效存储需…...
基于专利合作地址匹配的数据构建区域协同矩阵
文章目录 地区地址提取完成的处理代码 在专利合作申请表中,有多家公司合作申请。在专利权人地址中, 有多个公司的地址信息。故想利用这里多个地址。想用这里的地址来代表区域之间的专利合作情况代表区域之间的协同、协作情况。 下图是专利合作表的一部分…...
【AI+智造】在阿里云Ubuntu 24.04上部署DeepSeek R1 14B的完整方案
作者:Odoo技术开发/资深信息化负责人 日期:2025年2月28日 一、部署背景与目标 DeepSeek R1作为国产大语言模型的代表,凭借其强化学习驱动的推理能力,在复杂任务(如数学问题、编程逻辑)中表现优异。本地化部…...
0x02 js、Vue、Ajax
文章目录 js核心概念js脚本引入html的方式基础语法事件监听 Vuevue简介v-forv-bindv-if&v-showv-model&v-on Ajax js 核心概念 JavaScript:是一门跨平台、面向对象的脚本语言,用来控制网页行为实现交互效果,由ECMAScript、BOM、DOM…...
深入解析数据倾斜:原因、影响与优化方案
在分布式计算和大数据处理中,数据倾斜(Data Skew) 是一个常见且影响性能的难题。它可能导致某些计算节点负载过高,而其他节点资源浪费,从而影响整体吞吐量和任务执行时间。 在本文中,我们将深入分析 数据倾…...
Python Tornado 框架面试题及参考答案
目录 Tornado 框架的核心组件是什么?解释其作用。 Tornado 与其他 Python 框架(如 Django、Flask)的主要区别是什么? 为什么 Tornado 适合高并发场景?其设计哲学是什么? 解释 Tornado 的 Application 类和 RequestHandler 类的关系。 如何在 Tornado 中配置静态文件路…...
IDEA 使用codeGPT+deepseek
一、环境准备 1、IDEA 版本要求 安装之前确保 IDEA 处于 2023.x 及以上的较新版本。 2、Python 环境 安装 Python 3.8 或更高版本 为了确保 DeepSeek 助手能够顺利运行,您需要在操作系统中预先配置 Python 环境。具体来说,您需要安装 Python 3.8 或更高…...
Linux笔记---一切皆文件
1. 含义 “一切皆文件”是 Linux 对系统资源的高度抽象,通过文件接口屏蔽底层差异,提供了简洁、一致的操作方式。这种设计降低了系统复杂性,使得工具、脚本和应用程序能够以统一模式处理多样化资源,是 Linux 强大灵活性的重要基石…...
ubuntu22.04安装docker engine
在Ubuntu 22.04上安装Docker Engine可以通过以下步骤完成: 更新系统包索引: sudo apt update安装必要的依赖包: 这些包允许apt通过HTTPS使用仓库。 sudo apt install -y apt-transport-https ca-certificates curl software-properties-commo…...
