ArkTS-取消标题与自定义标题栏

文章目录

      • 取消标头
      • 自定义标题栏
      • 导入Resources
      • 自定义跳转动画
      • 关于底部tabBar导航
      • 文本输入(TextInput/TextArea)
        • 自定义样式
        • 添加事件
          • 可以是`onChange`
          • 可以是`onSubmit`
      • List列表组件
        • 设置主轴方向
      • 网格布局
      • 服务卡片-获取地理位置
        • 页面获取地理位置
        • 服务卡片获取地理位置

可以先看看,但是自己还没到达这高度(openHarmony的内容)

取消标头

//config.json(ets)
{
  //...
  "abilities": [
      {
		//...
        "metaData": { //添加这一段
          "customizeData": [{
            "name": "hwc-theme",
            "value": "androidhwext:style/Theme.Emui.Light.NoTitleBar",
            "extra": ""
          }]
        }
      }
    ],
  
}

在这里插入图片描述

自定义标题栏

因为是使用的是Components组件所以要使用@Props但这是单向的,父传子,可以使用@Link父子双向传输这里还是使用@Props就可以了

src/main/ets/MainAbility/components/组件名.ets

@Component
export struct CommonTitleBar{
  @Prop user_name:string;
  build(){
    Row(){
      Row(){
        Text(`${this.user_name}`).fontSize(25).fontColor('#f00')
      }.width('100%').height('8%').backgroundColor('#0ff')
    }.width('100%')
  }
}

src/main/ets/MainAbility/pages/组件名.ets

import {CommonTitleBar} from "../components/CommonTitleBar"

@Entry
@Component
struct Index {
  @State message: string = 'Hello World'
  public attribute: CommonTitleBar;
  @State text:string = "测试"
  build() {
    Row(){
      CommonTitleBar({user_name:this.text}) //值传入
    }
  }
}

在这里插入图片描述

导入Resources

这里以HarmonyOS的Image为例子
在这里插入图片描述
这里以media为例子----Image组件

Image($r('app.media.user_default')).width('20%').height('80%')

如果是rawfile文档里也有说明

Image($rawfile('图片名'))

注意: 这里的图片类型都是png,如果不是png格式的图片并且出现问题,请另找文章

自定义跳转动画

是基于ohos.router的跳转来测试的
官方文档

@Entry
@Component
struct myPage{
  build(){
    Column(){
      //components...
    }.height('100%')
  }
  
  pageTransition() {
    PageTransitionEnter({  })
      .onEnter((type: RouteType, progress: number) => {

      })
    PageTransitionExit({  })
      .onExit((type: RouteType, progress: number) => {

      })
  }
}

当然你可以写很多专场特效,如果你向我上面示例一样什么都不写,则是没有跳转动画的(注:输入pageT会有代码提示,注意区分)

关于底部tabBar导航

在这里插入图片描述

就是一个组件,只不过上面的俩组件的大小刚刚好让这个组件在最下面,但是要进行状态的同步,应该是要使用上面提到过的@Link组件

import router from '@ohos.router';
@Component
export struct BottomTabBar{
  @Prop backColor:string

  @Prop Dialog1Name:string;
  @Prop Dialog1Page:string;
  @Prop isDialog1Btn:boolean;
  @Link Dialog1BackColor:string;

  @Prop Dialog2Name:string;
  @Prop Dialog2Page:string;
  @Link Dialog2BackColor:string;
  @Prop isDialog2Btn:boolean;


  build(){
    Row(){
      Column(){
        if(this.isDialog1Btn == true){
          Image($r('app.media.home_selected')).width(30).height(30).position({x:15,y:-30})
        }else if(this.isDialog2Btn == true){
          Image($r('app.media.home')).width(30).height(30).position({x:15,y:-30})
        }
        Text(this.Dialog1Name).fontSize(10).fontColor(this.Dialog1BackColor).position({x:20,y:10})
      }.height('100%').onClick(()=>{
        router.replace({
          url: this.Dialog1Page
        })
      })
      Column(){
        if(this.isDialog1Btn == true){
          Image($r('app.media.my')).width(30).height(30).position({x:295,y:-52})
        }else if(this.isDialog2Btn == true){
          Image($r('app.media.my_selected')).width(30).height(30).position({x:295,y:-52})
        }
        Text(this.Dialog2Name).fontSize(10).fontColor(this.Dialog2BackColor).position({x:300,y:-11})
      }.onClick(()=>{
        router.replace({
          url: this.Dialog2Page
        })
      })
    }.width("100%").height('6%').backgroundColor(this.backColor)
  }
}

这样写可以以假乱真
在这里插入图片描述

当然如果不想要这么麻烦可以使用TabContent其中涉及到了Tabs

build(){
    Row(){
      Tabs({barPosition:BarPosition.Start,controller: this.controller}){
        TabContent(){
          Column(){
            Text("首页").fontSize(32)
          }.width('100%').height('100%').backgroundColor(Color.Pink)
        }
        TabContent(){
          Column(){
            Text("我的").fontSize(32)
          }.width('100%').height('100%').backgroundColor(Color.Pink)
        }
        TabContent(){
          Column(){}
        }
      }
    }.width("100%").height('6%')

在这里插入图片描述

// import router from '@ohos.router';



@Component
export struct BottomTabBar{
  @Prop backColor:string

  @State currentIndex:number = 0;
  @State fontColor: string = 'rgba(0, 0, 0, 0.4)'
  @State selectedFontColor: string = 'rgba(10, 30, 255, 1)'

  @State Tab1Name:string = "首页"
  @State Tab2Name:string = "我的"

  private controller: TabsController = new TabsController()

  @Builder TabBuilder(index: number,ImageUrl:Resource,ImageUrl_Selected:Resource,TabName:string) {
    Column() {
      Image(this.currentIndex === index ? ImageUrl_Selected : ImageUrl)
        .width(24)
        .height(24)
        .margin(6)
        .opacity(this.currentIndex === index ? 1 : 0.4)
        .objectFit(ImageFit.Contain)
      Text(`${TabName}`)
        .fontColor(this.currentIndex === index ? this.selectedFontColor : this.fontColor)
        .fontSize(10)
    }.width('100%')
  }

  build() {
    Row() {
      Tabs({ barPosition: BarPosition.End, controller: this.controller }) {
        TabContent() {
          Column() {
            Text("首页").fontSize(32)
          }.width('100%').height('100%').backgroundColor(Color.Pink)
        }.tabBar(this.TabBuilder(0, $r('app.media.home'), $r('app.media.home_selected'),this.Tab1Name))

        TabContent() {
          Column() {
            Text("我的").fontSize(32)
          }.width('100%').height('100%').backgroundColor(Color.Pink)
        }.tabBar(this.TabBuilder(1, $r('app.media.my'), $r('app.media.my_selected'),this.Tab2Name))
      }
    }.width("100%").height('6%').backgroundColor(this.backColor)
  }
}

在这里插入图片描述

文本输入(TextInput/TextArea)

我们这里使用单行输入(TextInput) 你也可以使用多行输入(TextArea)

基础的TextInput

TextInput().width(200).height(25).margin({top:10,left:30,right:0,bottom:10})

确认TextInput类型

TextInput().type(InputType.Normal)//可以是TextInput().type(InputType.Password)
自定义样式
TextInput({placeholder:'陈天羽'}).type(InputType.Normal)

在这里插入图片描述

可以请提前输入文本

TextInput({placeholder:'陈天羽',text:'你好'}).type(InputType.Normal)

可以改变TextInput背景颜色

TextInput({placeholder:'陈天羽'}).type(InputType.Normal).backgroundColor(Color.Pink)
添加事件
TextInput()
  .onChange((value: string) => {
    console.info(value);
  })
  .onFocus(() => {
    console.info('获取焦点');
  })
可以是onChange
TextInput({placeholder:'陈天羽'}).type(InputType.Normal).width(200).height(25).margin({top:10,left:30,right:0,bottom:10})
          .onChange((value:string)=>{
            console.info('TextInput:'+value);
          })

以下图片是键盘输入而获取输入内容,点击一个键,则更新一个内容
在这里插入图片描述
在这里插入图片描述

可以是onSubmit
TextInput({placeholder:'陈天羽'}).type(InputType.Normal)
	.width(200)
	.height(25)
	.margin({top:10,left:30,right:0,bottom:10})
	
	.onSubmit((EnterKeyType)=>{
		console.info(EnterKeyType+'输入法回车键的类型值')
	})

下图时按下手机键盘上的确认按键
在这里插入图片描述

List列表组件

设置主轴方向

我这里设置的是Horizontal

List(){
    ListItem(){
    	Text('推荐').fontSize(15).margin({top:0,left:10,right:10,bottom:0})
    }
    ListItem(){
    	Text('动画').fontSize(15).margin({top:0,left:10,right:10,bottom:0})
	}
}.listDirection(Axis.Horizontal).width('100%').height('8%')

在这里插入图片描述

网格布局

Grid(){
        GridItem(){
          Text("1").width('100%').height('100%').backgroundColor('#f00')
        }
        GridItem(){
          Text("2").width('100%').height('100%').backgroundColor('#f0f')
        }
        GridItem(){
          Text("3").width('100%').height('100%').backgroundColor('#0f0')
        }
        GridItem(){
          Text("4").width('100%').height('100%').backgroundColor('#00f')
        }
        GridItem(){
          Text("5").width('100%').height('100%').backgroundColor('#0ff') //当然超出的部分是没有显示的
		}
	}.rowsTemplate('1fr 1fr').columnsTemplate('1fr 1fr')
}.width('100%').height('86%').backgroundColor('#eee')

在这里插入图片描述

服务卡片-获取地理位置

首先我们要确认怎么用ets获取自己的地理位置官方文档-获取设备的位置信息

页面获取地理位置
  1. 首先我们要获取使用权限
"reqPermissions": [
      {
        "name": "ohos.permission.LOCATION",
        "reason": "$string:reason_description", 
        "usedScene": {
          "ability": ["com.example.myzdytitletest.MainAbility"],
          "when": "inuse"
        }
      }
    ]

这里的$string:reason_description在三个string.json中定义

//base/string.json
{
	"name":"reason_description",
	"value": "get Local"
}
//en_US/string.json
{
	"name":"reason_description",
	"value": "get Local"
}
//zh_CN/string.json
{
	"name":"reason_description",
	"value": "获取地理位置"
}
  1. 在其中一个组件中定义(这里我们选择初始化的第一个页面Index.ets)
//...(其他components)
import geolocation from '@ohos.geolocation';

@Entry
@Component
struct Index{
  onPageShow(){
    //获取位置信息
    var requestInfo = {'priority': 0x201, 'timeInterval': 0, 'distanceInterval': 0, 'maxAccuracy': 0};
    var locationChange = (location) => {
      console.log('locationChanger: data: ' + JSON.stringify(location));
    };
    geolocation.on('locationChange', requestInfo, locationChange);
  }
}

结果图
在这里插入图片描述

这些都是获取到的地址信息
在这里插入图片描述
抓一串数据来看

app Log: locationChanger: data: {"accuracy":9.935046,"additionSize":0,"additions":"","altitude":33.40478515625,"direction":0,"isFromMock":false,"latitude":30.02292782,"longitude":119.97146259,"speed":0,"timeSinceBoot":2212104121975933,"timeStamp":1701249020000}

但是我们这样只知道坐标不知道具体位置,所以我们可以使用(逆)地理编码转化来推测出当前位置信息

  • 调用getAddressesFromLocation,坐标转化地理位置信息。
let reverseGeocodeRequest:geolocation.ReverseGeoCodeRequest = {"latitude": 31.12, "longitude": 121.11, "maxItems": 1};
geolocation.getAddressesFromLocation(reverseGeocodeRequest, (err,data) => {
    if (err) {
        console.log('getAddressesFromLocation: err=' + JSON.stringify(err));
    }
	if (data) {
    	console.log('getAddressesFromLocation: data=' + JSON.stringify(data));
	}
});

出现的数据是

getAddressesFromLocation: data=[{"addressUrl":"","administrativeArea":"上海市","countryCode":"CN","countryName":"中国","descriptions":["上海市青浦区金家村路上海龙鼎苗木培育中心"],"descriptionsSize":0,"isFromMock":false,"latitude":31.120929,"locale":"zh_CN","locality":"上海市","longitude":121.110896,"phoneNumber":"","placeName":"金家村路上海龙鼎苗木培育中心","postalCode":"","premises":"","roadName":"青昆路","subAdministrativeArea":"","subLocality":"青浦区","subRoadName":"755号"}]
  • 调用getAddressesFromLocationName位置描述转化坐标。
var geocodeRequest = {"description": "上海市青浦区金家村路上海龙鼎苗木培育中心", "maxItems": 1};
geolocation.getAddressesFromLocationName(geocodeRequest, (data) => {
    console.log('getAddressesFromLocationName: ' + JSON.stringify(data));
});

博主很菜,没有写出实时性获取地址+(逆)地理编码转化。有大佬可以进行拓展(注意以上都可以写在Pages的onPageShow生命周期钩子里)

服务卡片获取地理位置

服务卡片可以参考这一篇文章接下来我们就开始使用服务卡片获取地理位置

博主很菜,因为是json控制的关系,目前还没写出。。。可以开骂

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

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

相关文章

wvp 视频监控平台抓包分析

抓包时机 下面的抓包时机是抓包文件最新,但是最有用的包 选择网卡开始抓包 如果之前已经选择网卡,直接开始抓包 停止抓包 重新抓包 sip播放过程分析 过滤条件 tcp.port 5060 and sip 可以看到有这些包 选择任何一个 ,戍边右键--追踪流--…

【批处理常用命令及用法大全】

文章目录 1 echo 和 回显控制命令2 errorlevel程序返回码3 dir显示目录中的文件和子目录列表4 cd更改当前目录5 md创建目录6 rd删除目录7 del删除文件8 ren文件重命名9 cls清屏10 type显示文件内容11 copy拷贝文件12 title设置cmd窗口的标题13 ver显示系统版本14 label 和 vol设…

加密挖矿、AI发展刺激算力需求激增!去中心化算力时代已来临!

2009年1月3日,中本聪在芬兰赫尔辛基的一个小型服务器上挖出了比特币的创世区块,并获得了50BTC的出块奖励。自加密货币诞生第一天起,算力一直在行业扮演非常重要的角色。行业对算力的真实需求,也极大推动了芯片厂商的发展&#xff…

matlab三维地形图

matlab三维地形图 %%%%—————Code to draw 3D bathymetry—————————— %-------Created by bobo,10/10/2021-------------------- clear;clc;close all; ncdisp E:\data\etopo\scs_etopo.nc filenmE:\data\etopo\scs_etopo.nc; londouble(ncread(filenm,lon)); lat…

【深度学习笔记】06 softmax回归

06 softmax回归 softmax运算损失函数对数似然Fashion-MNIST数据集读取数据集读取小批量整合所有组件 softmax回归的从零开始实现初始化模型参数定义softmax操作定义模型定义损失函数分类精度训练预测 softmax回归的简洁实现 softmax运算 softmax函数能够将未规范化的预测变换为…

C语言——实现一个计算m~n(m<n)之间所有整数的和的简单函数。

#include <stdio.h>int sum(int m, int n) {int i;int sum 0;for ( i m; i <n; i){sum i;}return sum;}int main() { int m, n;printf("输入m和n&#xff1a;\n");scanf("%d,%d", &m, &n);printf("sum %d\n", sum(m, n)…

每日一题:LeetCode-202.面试题 08.06. 汉诺塔问题

每日一题系列&#xff08;day 07&#xff09; 前言&#xff1a; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f50e…

一款LED段码显示屏驱动芯片方案

一、基本概述 TM1620是一种LED&#xff08;发光二极管显示器&#xff09;驱动控制专用IC,内部集成有MCU数字接口、数据锁存器、LED驱动等电路。本产品质量可靠、稳定性好、抗干扰能力强。 二、基本特性 采用CMOS工艺 显示模式&#xff08;8段6位&#xff5e;10段4位&#xff…

【寒武纪(6)】MLU推理加速引擎MagicMind,最佳实践(二)混合精度

混合精度在精度损失范围内实现数倍的性能提升。 支持的量化特性 构建混合精度的流程 构建混合精度的流程如下&#xff0c;支持浮点或半精度编程&#xff0c;以及量化精度编程两种方式。 浮点或半精度 无需提供tensor分布量化编程需要设置tensor分布。 网络粒度和算子粒度的设…

LVS-NAT实验

实验前准备&#xff1a; LVS负载调度器&#xff1a;ens33&#xff1a;192.168.20.11 ens34&#xff1a;192.168.188.3 Web1节点服务器1&#xff1a;192.168.20.12 Web2节点服务器2&#xff1a;192.168.20.13 NFS服务器&#xff1a;192.168.20.14 客户端&#xff08;win11…

智能优化算法应用:基于布谷鸟算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于布谷鸟算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于布谷鸟算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.布谷鸟算法4.实验参数设定5.算法结果6.参考文献7.…

Unity中Shader变体优化

文章目录 前言一、在Unity中查看变体个数&#xff0c;以及有哪些变体二、若使用预定义的变体太多&#xff0c;我们只使用其中的几个变体&#xff0c;我们该怎么做优化一&#xff1a;可以直接定义需要的那个变体优化二&#xff1a;使用 skip_variants 剔除不需要的变体 三、变体…

TikTok如何破解限流?真假限流如何分辨?速来自测

Tiktok是目前增长较快的社交平台&#xff0c;也是中外年轻一代首选的社交平台&#xff0c;许多出海品牌已经看到了TikTok营销的潜力&#xff0c;专注于通过视频、电商入驻来加入TikTok这片蓝海&#xff0c;加深品牌影响力&#xff0c;获得变现。 然而TikTok新手往往都会遇到一…

基于PHP的校园兼职系统的设计与开发

基于PHP的校园兼职系统的设计与开发 摘要&#xff1a;从古代至今&#xff0c;教育都是国家培养人才的手段&#xff0c;在古代教育往往都是课堂式教育&#xff0c;在课堂内老师教导学生学习&#xff0c;而随着时间的推移&#xff0c;越来越多的在校大学生已经不满足于只在课堂上…

【数据库】基于索引的扫描算法,不同类型索引下的选择与连接操作,不同的代价及优化

基于索引的算法 ​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏会定期更…

乱序学机器学习——主成分分析法PCA

文章目录 概览PCA核心思想和原理PCA求解算法PCA算法代码实现降维任务代码实现PCA在数据降噪中的应用PCA在人脸识别中的应用主成分分析优缺点和适用条件优点缺点适用条件 概览 PCA核心思想和原理 PCA求解算法 特征向量表示分布的方向&#xff0c;特征值表示沿着个方向分布的程度…

微信异性发送“我想你了”,不要不相信

微信是一个很好的沟通工具。当你心情不佳时&#xff0c;总会想找个人倾心交谈&#xff0c;盼望对方能给你一丝安慰&#xff0c;或是通过对话来释放内心的烦躁。 找到一个值得信赖的倾诉对象并不容易&#xff0c;因为这需要对方的信任和认可。当对方找到你倾诉时&#xff0c;说明…

python监测GPU使用

参考&#xff1a; https://stackoverflow.com/questions/67707828/how-to-get-every-seconds-gpu-usage-in-python 自己测试 import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optim import numpy as np import matplotlib.pyplot…

Libavutil详解:理论与实战

文章目录 前言一、Libavutil 简介二、AVLog 测试1、示例源码2、运行结果 三、AVDictionary 测试1、示例源码2、运行结果 四、ParseUtil 测试1、示例源码2、运行结果 前言 libavutil 是一个实用库&#xff0c;用于辅助多媒体编程&#xff0c;本文记录 libavutil 库学习及 demo 例…

【编写UI自动化测试集】Appium+Python+Unittest+HTMLRunner​

简介 获取AppPackage和AppActivity 定位UI控件的工具 脚本结构 PageObject分层管理 HTMLTestRunner生成测试报告 启动appium server服务 以python文件模式执行脚本生成测试报告 下载与安装 下载需要自动化测试的App并安装到手机 获取AppPackage和AppActivity 方法一 有源码…