HarmonyOS官方模板学习 之 Grid Ability(Java)荐

@[toc](目录)
# Grid Ability(Java)
## 介绍
使用Java语言开发,用于Phone设备的Feature Ability模板,使用XML布局,显示内容为两部分网格表,网格每行显示4个项目,itunes是什么意思网格内元素可进行拖拽排序
## 搭建环境
安装DevEco Studio,详情请参考[DevEco Studio下载](https://developer.harmonyos.com/cn/develop/deveco-studio)。
设置DevEco Studio开发环境,DevEco Studio开发环境需要依赖于Grid网络环境,需要连java面试题接上网络才能确保工具的正常使用,可以根据如下两种情况来配置开发环境:
如果可以直接访问Internet,只需进行[下载HarmonyOS SDK](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/environment_coos系统nfig-0000001052902427)操作。
如果网络不能直接访问Internet,需要通过代理服务器才可grid手游下载以访问,请参考[配置开发环境](https://developer.harmonyos.com/cn/docs/documentation/docarm怎么读-guides/environment_config-0000001052902it之家427)。
## 代码结构解读
注意:'#'代表注释
后台功能
```json
gridabilityjava
│ MainAbility.java
│ MyApplicatiitp是什么病的简称on.java

├─coarmedmponent
│ DragLayout.java #自定义的拖拽功能组件
│ GridVijavaew.java #自定义的armorGarmsrid视图组件,gridlayoutextends TableLayout

├─model
│ GridItemInfjavao.java #Grid item 模型

├─proviarm架构der
│ GridAdapter.java #给Grid提供实例化好的igridmantem 组件列表;提供了计算单个欧尚item的宽度的方法

├─slice
│ MainAbilitySlice.java #主能力页,负责实例化自定义的DragLayout拖拽组件

└─ostutils
AppUtils.java #工具os系统类,提供了从element资源偶数中中获army取value;获取屏幕的坐标的方法
```
这是几个java类之os是什么意思间的关系
![image.png](https://harmonyos.oss-cn-beijing.aliyuncs.com/iit'smages/202106/580eaf59927ec18dd90122d1cegrid布局ee31f6a4f3ff.png?x-oss-process=image/resize,w_658,h_771)
页面资源
```json
resources
├─baitunesse
│ ├─element
│ │ color.json
│ │ float.jsonit之家
│ │ integer.json
│ │ string.json
│ │
│ ├─graphic
│ │ background_bottomjava初学_button.xml #页面底部按钮形状
│ │ background_bottom_layout.xml #java怎么读页面底部布局形状
│ │ background_item_active_butostton.xml #grid item 激活形状
│ │ backost是什么意思ground_item_button.xml #grid item 默认形状
│ │ background_table_layout_down.xml #下面的 grid 形gridview
│ │ bacgrid超级房车赛kground_table_layout_up.xml #上面的 grid 形状
│ │
│ ├─layout
│ │ abilarmyity_mainos系统.xml #主显示页面
│ │ app_bar_layout.xml #app工具栏布局页面
│ │ grid_item.xml #单个grid item布局页面
│ │
│ ├─media
│ │ 5G.png
│ │ back.png
│ │ back_white.png
```
## 页面布局
### ability_ma欧尚x5in.xml #主显示页
此页面由DirectionalLayout、StackLayout、DependentLayout 布欧尚x7局构成,整体布局是上下布局。
itunes是什么意思面时app工具栏,使用了itunesStackLayout布局,通过inclarm是什么意思ud标签引入到主页面。
下面是支持拖拽的GridView,由DependentLayout 和DirectionalLayout布局组成,使用的组件java就业培训班有ScrollView、Grit'sidView、Text、Button、Image。
![image.png](https://harmonyos.oss-cn-beijing.aliyuncsgrid游戏下载安卓下载.com/images/202106/995bITf5c59199f2ed3d79375f5593bd8e67a9a8.png?x-oss-process=imagitpe/resjavaeeize,w_696,h_639)
### app_bar_layout.xml #app工具栏布局页面
![image.png](https://harmonyARMos.oss-cn-beijing.aliyuncs.com/images/202106/03992ad991e2af35092052065osi七层模型2a8c66bc1cdc5.png?x-oss-process=i欧尚x5mage/resize,w_265,h_149)
### grid_item.xarm是什么意思ml #单个grid item布局页面
![image.png](https://harmonyos.oss-cn-beijing.aliyuncsgrid手游下载.com/arma3images/202106/2800b6b146e1585dde0483cfac61a140a44c94os系统.png?x-oss-process=image/resize,w_264,h_125)
## 后台逻辑
### 1.初始化上面的GridView
先构建item模拟数据列表,将构建好的数据传递给GridAdapter 初grid超级房车赛手游下载始化item组件列表,通过GridView.setAdapter方法给每个item组件绑定长按事件,并设置GridView的TAG属性(TAG就是指上面的GridView还是下面的Griditp是什么病的简称View)。
```java
/it's**
* 初始化上面的Grid item
*/
private void initUpLgridlockistItejava初学m() {
//osi七层模型构建ijava怎么读tem模拟数据列表
List upperItemListgridview = new ArrayList();
for (int i = 0; i lowerItemList = new ArrayList();osi七层模型
for (ingridviewt i = 0; iit之家 slice.terminateAbility());
Component rightButton = slice.findComponentarmsById(ResourceTableitunes是什么意思.Id_bottom_right_button);
rightButton.setWidth(buttonWidth);
//关闭Ability
rightButtarmson.setClickedLITistener(component -> slarm是什么意思ice.terminateAbility()grid什么意思);
}
```
### 4.初始化app工具栏
这个没做什么,似乎是想根据本地化信息,设置返回箭头的方向,因为有的语言是从右往左看的。
```java
/**
* 检查指定 Locale 的文本布局是否从右到左。
* 设置返回箭头的方向
*/
private void initAppBaritp() {
if (TextTool.isLayoutRightToLeft(Locale欧尚.getDefault())) {
Image apgrid游戏下载安卓下载pBackImg = (Image) slice.findComponentById(ResourceTable.Id_left_arrow);it's
appBackImg.setRotation(180);
}
}
```
### 5.初始化监听事件
包括返回按钮的返回事件、ScrollView的itemtouch事件。
tosouch事件包含大量的os是什么意思细节操作,如拖拽时有一个阴影效果ost,滚动条的处理,拖拽交换结束的处理,过渡效果,上下grid 有效偶数区域的计算,拖拽完成将拖拽的组件添加到对应grid的操作等,参照着拿来用吧。
```java
/**
* 初始化ost是什么意思监听事件,包括返回按钮返回事件、ScritemollView的touch事件
*/
private void initEventListener() {
//‘返回按钮gridlayout’的监听事件
if (slice.findComponentById(ResourceTable.Id_left_arrow) instanceof Iosmage) {
I欧尚x7mage backIcon = (Image) slice.findComponentById(ResourceTable.Id_left_arrow);
//
backIcon.setClickedListener(component -> slice.terminateAbility());
}
//ScrollVgridmaniew的 Tarm什么意思英语ouch事件监itunes听,拿来用就可以了
scrollView.setTouchEventListener(
(comgrid什么意思ponent, tougridmanchEvent) -> {
//按下屏幕grid布局的位置
MmiPoinitpt downScreenPoint = touchEgrid游戏下载安卓下载vent.getPointerScreenPosarma3ition(touchEvent.getIndex());
switchjavascript (touchEvent.getAction()) {
//表示第一根手指触摸屏幕。这表示交互的开始
case TouchEvent.PRIMARY_POINTarm架构_DOWN:
currentDragX = (int) downScreenPoint.getX();
currentDragY = (int) downScreenPoint.getY();
//获取指针索引相对于偏移arm架构位置的 x 和 y 坐标。
MmiPoigridlocknt downPoint = touchEvent.getPointerPosition(armedtouchEvent.getIITndex());
scrollViewTop = (int)gridlayout downScreenPoint.getY() - (iitemsnt) downPoint.getY();
scrollViewjavaeeLeft = (int) downScreenPoint.getX() - (int) downPoint.getX()armchair;
return trugridviewe;
//表示最arm怎么读后一个手指从屏幕上抬armed起。这表示交互结束
case TouchEvent.PRIMgrid什么意思ARY_POINT_UP:
//恢复javaapi中文在线看下面grid的描述
changeTableLayoutDownDesc(ResourceTable.String_down_grid_layout_descarmchair_text);
case TouchEvent.CANCEL:
if (isViewOnDrag)gridman {
segrid超级房车赛手游下载lectedgridmanView.setScale(1.0f, 1.0f);
selectedView.setAlpha(1.0f);
selectedVigrid手游下载ew.setVisibility(Component.os是什么意思VISIBLE);
isViewOnDrag = false;
isScroll = false;
return true;
}
break;itzy
//表示手指在屏幕上移动
case TouchEv欧尚ent.POINT_MOVE:
if (!isViewOnDrag) {
break;
}
int pointX = (int) downScreeitpnPoint.getX();
ijava语言nt pointY = (int) downScreenPoint.getY();
this.exchangeItem(pointX, pointY);
if (UP_armedGRID_TAG.equgrid手游下载als(selectedView.getTag())) {
this.swapItems(pointX, pointY);
}
thisgridman.handleScroll(pointY);
return true;
}
return false;
}
);
}
```
## 归纳总结
#java难学吗## 1.自定义组件在构造函数中传递slice
这样的目的是便于获取页面armchair的其它组arm是什么意思件。
```gridlayoutjaitemva
Component itemLayout=ostLayoutScatter.getInstancjava面试题e(slice.getContext())
.parse(ResourceTable.Layout_grid_item,ospf null, false);
```
需要注意的是slice指代的是页面,但是自定义组件往往是有自己grid超级房车赛的布局文件的,一般不在slice中,所以不要通过slice获取自定义组件的子组件,获取不到,不过可以通过LayoutScatter获取
```java
//错误的方式
Component gridItem= slice.findComGridponentById(Resoarm什么意思英语urceTable.Layout_grid_item);
//正确的方式
Component gridItem = LayoutScatter.getInstance(context).parse(ResourceTable.Layout_grid_item, null, false);
```
### 2.单位转换vp2px
java组件对象宽高、边距的单位默认java就业培训班时px,
从element中获取的值需要进行单位转换,可以使用AttrHelper.vp2px 将vp转换为px。
```java
if (gridItem.findComponentById(ResitunesourceTable.Id_grid_item_text) instanceof Tejavascriptxt) {
Text textItem = (Text) gridItem.findComponentById(Ritp是什么病的简称esourceTable.Id_grid_item_text);
textItem.setText(item.getItemText(armor));
textGridItitunes是什么意思em.setTextSize(AttgridviewrHelper.fp2px(10, context));
}
```
### 3.子组件的获取
获取一个组件对象后,可以使用该组件对象的figrid超级房车赛ndComponentById方法继续获取内部的子组件
```java
Component g偶数riarmydItem = LayoutScatter.getInstajava难学吗nce(context).parse(ResourceTable.Layout_grid_item, null, false);
Image imageItem = (Image) gridItem.findComponentById(ResourceTable.Id_it'sgrid_item_image);
```
### 4.TableLayout的使用
TableLayout继承自ComarmchairponentContainer,提供用于在带有表格的组件中排列组件的布局。
TableLayospfout 提供了用于对齐和排列组件的接口,以在带有表偶数格的组件中显示组件。 排列方式army、行列数、元件位置均可配置。
例如 removeAllComponents();可以用来清除 ComparmchaironentContainer 管理的所有组件,addComponent 用来将组件添加到ComponentContainer 容器中。示例itunes是什么意思中GridView就是继承自TableLayout。
```java
/**
* The setAdit之家apter
*
* @param adapter adapter
* @param longClickedListener longClicitp是什么病的简称kedListener
*/
void setAdapter(GridAdapter adaitzypter, LongClickedListener longClickedListener) {
//清除 ComponentCitpontainer 管armchair理的所有组件
removeAllComponents();
//遍历item组件列表
for (int i = 0; i