鴻蒙開發(fā):自定義一個簡單的標題欄

前言

標題欄幾乎是每個應用的標配,或多或少都會存在坤学,在Android中一個簡單的組合View就可以搞定疯坤,鴻蒙開發(fā)中,也是十分的簡單深浮,選擇相對應的布局压怠,然后設置組件即可。

你可以使用相對布局RelativeContainer或者線性布局Row飞苇, 都可以進行實現(xiàn)菌瘫,根據項目中的需求或者UI設計進行組件擺放,如上圖所示布卡,中間是標題雨让,左右兩個組件,簡單實現(xiàn)如下:

Row() {
  Text("返回").margin({ left: 10 })
  Text("左右文字按鈕")
  Text("編輯").margin({ right: 10 })
}.width("100%")
  .height(50)
  .justifyContent(FlexAlign.SpaceBetween)

以上的代碼僅是左中右三個組件的時候使用忿等,可以發(fā)現(xiàn)栖忠,一個標題組合組件一點難度沒有,也沒有任何技術含量这弧,在實際的開發(fā)中娃闲,如果有多種標題欄的形式,考慮到代碼復用的情況匾浪,盡量抽取一個自定義組件皇帮,通過屬性的控制,選擇當前頁面需要的組件即可蛋辈。

比如属拾,有的頁面左邊是圖片,右邊是圖片冷溶,或者左邊兩個按鈕渐白,兩個圖片,或者圖片文字相結合等等情況逞频,在實際封裝中纯衍,都是需要考慮的。

針對以上的各種情況苗胀,目前也做了一層簡單的封裝襟诸,已經上傳至了中心倉庫瓦堵,有需要的朋友可以直接拿來使用。

中心倉庫地址:

https://ohpm.openharmony.cn/#/cn/detail/@abner%2Fbar

快速使用

方式一:在需要Module中的oh-package.json5中設置三方包依賴歌亲,配置示例如下:

"dependencies": { "@abner/bar": "^1.0.1"}

方式二:在Terminal窗口中菇用,執(zhí)行如下命令安裝三方包,DevEco Studio會自動在工程的oh-package.json5中自動添加三方包依賴陷揪。

建議:在使用的模塊路徑下進行執(zhí)行命令惋鸥。

ohpm install @abner/bar

初始化

初始化的作用,用于統(tǒng)一標題欄悍缠,比如寬高卦绣、字體顏色大小,統(tǒng)一點擊事件等等,建議在AbilityStage中進行扮休,屬性 選擇性調用迎卤,如果不需要,可以不設置玷坠。

initActionBar({})

相關屬性

相關屬性可以用于全局初始化或者單獨使用都可以蜗搔。

屬性 類型 概述
barWidth Length 標題欄寬度
barHeight Length 標題欄高度
barBackgroundColor ResourceColor 標題欄背景顏色
onTitleClick 回調 標題點擊事件
leftText string/Resource 左邊按鈕文字
left2Text string/Resource 左邊第二個按鈕文字
leftMenuMargin Length 左邊按鈕,默認距離左邊
leftMenuBgColor ResourceColor 左邊背景顏色
rightMenuBgColor ResourceColor 右邊背景顏色
rightMenuMargin Length 右邊按鈕距離右邊
leftMenuWidth Length 左邊按鈕整體寬度
leftMenuHeight Length 左邊按鈕整體高度
rightMenuWidth Length 右邊按鈕寬度
rightMenuHeight Length 右邊按鈕高度
onLeftClick 回調 左邊整體的點擊
onLeftTextClick 回調 左邊文字按鈕的點擊
onLeftImageClick 回調 左邊圖片按鈕的點擊
onRightClick 回調 右邊整體的點擊
onRightTextClick 回調 右邊文字按鈕的點擊
onRightImageClick 回調 右邊圖片按鈕的點擊
leftIcon PixelMap/ ResourceStr/ DrawableDescriptor 左邊按鈕第一個圖標
left2Icon PixelMap/ ResourceStr/ DrawableDescriptor 左邊按鈕第二個圖標
rightIcon PixelMap/ ResourceStr/ DrawableDescriptor 右邊按鈕第一個圖標
right2Icon PixelMap/ ResourceStr/ DrawableDescriptor 右邊按鈕第二個圖標
hideLeftMenu boolean 隱藏左邊按鈕八堡,默認不隱藏
hideTitle boolean 隱藏標題樟凄,默認不隱藏
hideRightMenu boolean 隱藏右邊按鈕,默認不隱藏
isAvoidanceNavigation boolean 是否避讓導航兄渺,默認不避讓
titleAttribute TitleAttribute 標題通用屬性缝龄,顏色大小等
leftMenuAttribute BarMenuAttribute 左邊第一個按鈕通用屬性,顏色大小等
leftMenu2Attribute BarMenuAttribute 左邊第二個按鈕通用屬性挂谍,顏色大小等
rightMenuAttribute BarMenuAttribute 右邊第一個按鈕通用屬性叔壤,顏色大小等
rightMenu2Attribute BarMenuAttribute 右邊第二個按鈕通用屬性,顏色大小等

基本使用

1口叙、簡單使用炼绘,就是一個普通的組件

ActionBar({
  title: "普通單標題"
})

2、左側文字按鈕展示

ActionBar({
  title: "左側文字按鈕",
  leftText: "返回",
  onLeftClick: () => {
    console.log("====點擊了左側按鈕")
  },
})

3妄田、左側圖片按鈕

ActionBar({
  title: "左側圖片按鈕",
  leftIcon: $r("app.media.app_icon"),
  onLeftClick: () => {
    console.log("====點擊了左側按鈕")
  },
})

4俺亮、右側文字按鈕

ActionBar({
  title: "右側文字按鈕", rightText: "編輯",
  onRightClick: () => {
    console.log("====點擊了右側按鈕")
  }
})

5、右側圖片按鈕

ActionBar({
  title: "右側圖片按鈕",
  rightIcon: $r("app.media.app_icon"),
  onRightClick: () => {
    console.log("====點擊了右側按鈕")
  }
})

6疟呐、左右文字按鈕

ActionBar({
  title: "左右文字按鈕",
  leftText: "返回",
  rightText: "編輯",
  onLeftClick: () => {
    console.log("====點擊了左側按鈕")
  },
  onRightClick: () => {
    console.log("====點擊了右側按鈕")
  }
})

7脚曾、左右圖片按鈕

ActionBar({
  title: "左右圖片按鈕",
  rightIcon: $r("app.media.app_icon"),
  leftIcon: $r("app.media.app_icon"),
  onLeftClick: () => {
    console.log("====點擊了左側按鈕")
  },
  onRightClick: () => {
    console.log("====點擊了右側按鈕")
  }
})

8、左側文字雙按鈕

ActionBar({
  title: "左側文字雙按鈕",
  leftText: "按鈕1",
  left2Text: "按鈕2",
  leftMenuAttribute: {
    textMargin: { right: 10 }
  },
  onLeftTextClick: (position) => {
    console.log("====點擊了左側按鈕:" + position)
  }
})

9启具、左側圖片雙按鈕

ActionBar({
  title: "左側圖片雙按鈕",
  leftIcon: $r("app.media.app_icon"),
  left2Icon: $r("app.media.app_icon"),
  leftMenuAttribute: {
    imageMargin: { right: 10 }
  },
  onLeftImageClick: (position) => {
    console.log("====點擊了左側按鈕:" + position)
  }
})

10本讥、右側文字雙按鈕

ActionBar({
  title: "右側文字雙按鈕",
  rightText: "按鈕1",
  right2Text: "按鈕2",
  rightMenuAttribute: {
    textMargin: { left: 10 }
  },
  onRightTextClick: (position) => {
    console.log("====點擊了右側按鈕:" + position)
  }
})

11、右側圖片雙按鈕

ActionBar({
  title: "右側圖片雙按鈕",
  rightIcon: $r("app.media.app_icon"),
  right2Icon: $r("app.media.app_icon"),
  rightMenu2Attribute: {
    imageMargin: { left: 10 }
  },
  onRightImageClick: (position) => {
    console.log("====點擊了右側按鈕:" + position)
  }
})

12、左右文字雙按鈕

ActionBar({
  title: "左右文字雙按鈕",
  leftText: "按鈕1",
  left2Text: "按鈕2",
  leftMenuAttribute: {
    textMargin: { right: 10 }
  },
  onLeftTextClick: (position) => {
    console.log("====點擊了左側按鈕:" + position)
  },
  rightText: "按鈕1",
  right2Text: "按鈕2",
  rightMenuAttribute: {
    textMargin: { left: 10 }
  },
  onRightTextClick: (position) => {
    console.log("====點擊了右側按鈕:" + position)
  }
})

13囤踩、左側圖文

ActionBar({
  title: "左側圖文",
  leftText: "返回",
  leftIcon: $r("app.media.app_icon"),
  leftMenuType: MenuType.IMAGE_TEXT,
  leftMenuAttribute: {
    imageMargin: {
      right: 10
    }
  },
  onLeftClick: () => {
    console.log("============點擊了整個")
  }
})

14旨椒、左側文圖

ActionBar({
  title: "左側文圖",
  leftText: "返回",
  leftIcon: $r("app.media.app_icon"),
  leftMenuType: MenuType.TEXT_IMAGE,
  leftMenuAttribute: {
    textMargin: {
      right: 10
    }
  },
  onLeftClick: () => {
    console.log("============點擊了整個")
  }
})

15、右側圖文

ActionBar({
  title: "右側圖文",
  rightText: "編輯",
  rightIcon: $r("app.media.app_icon"),
  rightMenuType: MenuType.IMAGE_TEXT,
  rightMenuAttribute: {
    imageMargin: {
      right: 10
    }
  },
  onRightClick: () => {
    console.log("============點擊了整個")
  }
})

16堵漱、右側文圖

ActionBar({
  title: "右側文圖",
  rightText: "編輯",
  rightIcon: $r("app.media.app_icon"),
  rightMenuType: MenuType.TEXT_IMAGE,
  rightMenuAttribute: {
    textMargin: {
      right: 10
    }
  },
  onRightClick: () => {
    console.log("============點擊了整個")
  }
})

17、自定義標題

ActionBar({
  titleLayout: this.titleLayout
})

18涣仿、左側按鈕自己定義

ActionBar({
  title: "左側按鈕自己定義",
  leftMenuLayout: this.leftMenuLayout
})

19勤庐、右側按鈕自己定義

ActionBar({
  title: "右側按鈕自己定義",
  rightMenuLayout: this.rightMenuLayout
})

使用總結

本省就是一個很簡單的標題欄組件蔬捷,沒有什么過多的技術含量诈乒,有一點需要注意古拴,當使用沉浸式的時候酥郭,注意標題欄的位置慕购,需要避讓狀態(tài)欄猴娩。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末欺殿,一起剝皮案震驚了整個濱河市桦卒,隨后出現(xiàn)的幾起案子拔莱,更是在濱河造成了極大的恐慌碗降,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件塘秦,死亡現(xiàn)場離奇詭異讼渊,居然都是意外死亡,警方通過查閱死者的電腦和手機尊剔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門爪幻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人须误,你說我怎么就攤上這事挨稿。” “怎么了京痢?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵奶甘,是天一觀的道長。 經常有香客問我历造,道長甩十,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任吭产,我火速辦了婚禮侣监,結果婚禮上,老公的妹妹穿的比我還像新娘臣淤。我一直安慰自己橄霉,他們只是感情好,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布邑蒋。 她就那樣靜靜地躺著姓蜂,像睡著了一般按厘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钱慢,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天逮京,我揣著相機與錄音,去河邊找鬼束莫。 笑死懒棉,一個胖子當著我的面吹牛,可吹牛的內容都是我干的览绿。 我是一名探鬼主播策严,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼饿敲!你這毒婦竟也來了妻导?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤怀各,失蹤者是張志新(化名)和其女友劉穎倔韭,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體渠啤,經...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡狐肢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了沥曹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片份名。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖妓美,靈堂內的尸體忽然破棺而出僵腺,到底是詐尸還是另有隱情,我是刑警寧澤壶栋,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布辰如,位于F島的核電站,受9級特大地震影響贵试,放射性物質發(fā)生泄漏琉兜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一毙玻、第九天 我趴在偏房一處隱蔽的房頂上張望豌蟋。 院中可真熱鬧,春花似錦桑滩、人聲如沸梧疲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽幌氮。三九已至缭受,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間该互,已是汗流浹背米者。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宇智,地道東北人塘雳。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像普筹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子隘马,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內容