執行效果java
上一篇文章中說過,直接使用鴻蒙系統中的CommonDialog大體是下面的效果:
git
這個效果實在是沒法用於實際的應用開發。本文介紹如何定製本身的CommonDialog。仍是先看演示視頻:github
準備佈局web
定製CommonDialog的第一步是定義對話框的佈局,具體以下:編程
<DirectionalLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:width="match_parent" ohos:height="match_content" ohos:alignment="center" ohos:orientation="vertical"> <DirectionalLayout ohos:width="match_content" ohos:height="match_content" ohos:top_padding="10vp" ohos:bottom_padding="10vp" ohos:left_padding="10vp" ohos:right_padding="10vp" ohos:background_element="#FFFFFF" ohos:orientation="vertical"> <Text ohos:width="match_content" ohos:height="match_content" ohos:text="你以爲這個對話框怎麼樣?" ohos:text_color="#000000" ohos:text_size="20fp"/> <DirectionalLayout ohos:height="match_content" ohos:width="match_parent" ohos:top_margin="10vp" ohos:orientation="horizontal"> <Button ohos:id="$+id:good" ohos:width="0vp" ohos:weight = "5" ohos:height="match_content" ohos:text="很好" ohos:text_size="20fp" ohos:text_color="#000000" ohos:background_element="#AAFFAA" /> <Component ohos:width="0vp" ohos:weight = "1" ohos:height="match_parent"/> <Button ohos:id="$+id:ordinary" ohos:width="0vp" ohos:weight = "5" ohos:height="match_content" ohos:text="通常" ohos:text_size="20fp" ohos:text_color="#000000" ohos:background_element="#AAAAFF" /> <Component ohos:width="0vp" ohos:weight = "1" ohos:height="match_parent"/> <Button ohos:id="$+id:bad" ohos:width="0vp" ohos:weight = "5" ohos:height="match_content" ohos:text="很差" ohos:text_size="20fp" ohos:text_color="#000000" ohos:background_element="#FFFF00" /> <Component ohos:width="20vp" ohos:height="match_parent"/> </DirectionalLayout> </DirectionalLayout></DirectionalLayout>
須要注意的是,最外層佈局中只包含一個二層佈局,這種作法的目的是爲了解決對話框默認佔滿屏幕寬度的問題。
設計模式
生成定製對話框微信
第2行經過LayoutScatter解析前面的佈局文件。這種用法在ListContainer示例中使用過。架構
第3行代碼將對話框設爲透明,實際的效果是讓最外層佈局透明。視頻中展現的從第二層佈局開始到內容。
app
CommonDialog dlg = new CommonDialog(this);Component layout = LayoutScatter.getInstance(this).parse(ResourceTable.Layout_common_dialog, null, true);dlg.setTransparent(true);dlg.setContentCustomComponent(layout);Component.ClickedListener listener = new Component.ClickedListener() { public void onClick(Component component) { new ToastDialog(getContext()) .setText(((Button)component).getText()) .show(); }};Button good = (Button)layout.findComponentById(ResourceTable.Id_good);good.setClickedListener(listener);Button ordinary = (Button)layout.findComponentById(ResourceTable.Id_ordinary);ordinary.setClickedListener(listener);Button bad = (Button)layout.findComponentById(ResourceTable.Id_bad);bad.setClickedListener(listener);dlg.show();
若是不調用setTransparent方法的話,畫面看起來是下面的樣子:ide
第4行代碼是經過setContentCustomComponent方法生成你的佈局對象傳遞給CommonDialog。
注意事項
目前的這種作法在鴻蒙文檔中並無說明,所以也就不排除未來發生變化的可能性。但願早日看到官方文檔中的正式說法。
參考代碼
完整代碼能夠從如下連接下載:
https://github.com/xueweiguo/Harmony/tree/master/HelloHarmony
參考資料
CommonDialog類
https://developer.harmonyos.com/cn/docs/documentation/doc-references/commondialog-0000001054678727
做者著做介紹
《實戰Python設計模式》是做者去年3月份出版的技術書籍,該書利用Python 的標準GUI 工具包tkinter,經過可執行的示例對23 個設計模式逐個進行說明。這樣一方面可使讀者瞭解真實的軟件開發工做中每一個設計模式的運用場景和想要解決的問題;另外一方面經過對這些問題的解決過程進行說明,讓讀者明白在編寫代碼時如何判斷使用設計模式的利弊,併合理運用設計模式。
對設計模式感興趣並且但願隨學隨用的讀者經過本書能夠快速跨越從理解到運用的門檻;但願學習Python GUI 編程的讀者能夠將本書中的示例做爲設計和開發的參考;使用Python 語言進行圖像分析、數據處理工做的讀者能夠直接以本書中的示例爲基礎,迅速構建本身的系統架構。
以爲本文有幫助?請分享給更多人。
關注微信公衆號【面向對象思考】輕鬆學習每一天!
面向對象開發,面向對象思考!
本文分享自微信公衆號 - 面向對象思考(OOThinkingDalian)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。