Java的介面布局DSL的設計與實現

2021-05-28 13:56:05 字數 3376 閱讀 5767

在本文中,我們會給出一種更好的解決方案,我們不是去試圖把介面設計者頭腦中的設計概念和樣式逐步降級、分解成所使用的實現語言能夠理解的低層概念,也不是提供一些已經完成的、確定的但難以擴充和更改的布局樣式庫供介面設計者使用。我們所提供的是一種專門用於描述高層介面設計樣式的語言。通過這種語言,介面設計者可以直接、明確地描述出他們頭腦中的布局設計樣式;通過這種語言,介面設計者可以自己方便地、靈活地制定自己需要的布局樣式。此外,本文中給出的設計思想對於其他領域的設計也有很好的借鑑作用。

創造性,還是乏味?

介面設計是一項非常有創造性,甚至富有藝術性的工作,乙個簡潔、易用、漂亮的介面在帶給使用者方便的同時,也會給介面設計者帶來極大的成就感。但是,在現實中,情況似乎並非如此,很多人都認為做介面是一項非常繁瑣、機械、乏味的工作,並千方百計地去逃避介面相關的工作。這是為什麼呢?

原因很簡單,因為做介面其實涉及兩項工作,一項是介面的一些設計創意,包括介面的布局樣式以及和使用者的互動方式,這項工作充滿挑戰和樂趣。但是,這些設計創意最終是要落實到實現上的,這就是第二項工作。此時,你頭腦中那些清晰、完整的設計概念開始變得瑣碎,你不得不和那些低層次的座標位置打交道。更糟糕的是,當你好不容易做好了乙個介面,但是發現其中某些元素的布局需要一些調整時,這個你本應認為是乙個很簡單的改變卻造成大量重複的低層次座標位置更改時,你肯定會認為做介面是多麼的機械和乏味呀!

其實,造成這種認識的根源在於介面設計創意和實現這些創意概念的語言之間存在很大的斷層。這樣,在具體實現時,你就必須得把這些清晰、完整的布局樣式降級成一些瑣碎、沒有什麼意義的低層次的座標值,使得實現語言能夠理解。這項工作不僅乏味,而且最終的實現也非常的脆弱 —— 乙個在布局樣式層面非常簡單的更改,就會造成實現層面的巨大變動。比如:我們可以說把一組元素同時按比例縮小 10%,做過介面的朋友肯定知道這個更改意味著什麼。

為了應對這個斷層的問題,目前幾乎所有的涉及介面製作的開發工具都提供了相同的解決方法:視覺化的介面設計工具以及布局管理器。但是這兩種方法都沒有從根本上解決這個問題。

視覺化介面設計工具確實避免了不少繁瑣的介面元素擺放工作,但是對於專業的介面設計來說,通過拖放設計出來的介面在準確度和規範性上都有待提高,此外還有更為重要的一點,那就是存在於設計者頭腦中的布局樣式仍然沒有被明確地描述出來,而是被降級成乙個個擺放在一起的零散的元件,雖然這些元件本身是可視的。這個語義斷層的存在同樣會使得通過視覺化介面設計工具設計出來的介面非常脆弱。

布局管理器試圖通過提供一些常用的布局樣式來解決這個問題。但是,這種做法非常僵化,也就是說你只能使用現有的布局管理器,如果它們無法滿足你的要求,你也無法自己定製。此外,這些布局管理器僅僅適合於一些簡單的情況。對於一些複雜的布局樣式來說,它們的描述能力就顯得非常的不足。那些曾經和 gridbaglayout 鬥爭過的朋友對此肯定深有體會。

在本文中,我們會給出一種更好的解決方案,我們不是去試圖把介面設計者頭腦中的設計概念和樣式逐步降級、分解成所使用的實現語言能夠理解的低層概念,也不是提供一些已經完成的、確定的但難以擴充和更改的布局樣式庫供介面設計者使用。我們所提供的是一種專門用於描述高層介面設計樣式的語言。通過這種語言,介面設計者可以直接、明確地描述出他們頭腦中的布局設計樣式,通過這種語言,介面設計者可以自己方便地、靈活地制定自己需要的布局樣式。也就是說,本來僅存在於介面設計者頭腦中的抽象布局樣式,現在也變得可描述,可程式設計了。

介面布局語言介紹

在學習介面布局語言的設計之前,先來了解一下該語言的使用是非常有幫助的。我們的介面布局語言非常簡單,簡單到只有一種原子:component。component 是一種基本的布局元素,可以對 component 進行平移和伸縮,使其和給定的乙個布局空間 rectangle 匹配。比如對於 button 這個 component 來講,它具有傳統按鈕的外觀,但是它在布局上所佔的實際空間則是由為其指定的 rectangle 決定的。此外,component 要最終在介面上顯示出來,就必須有乙個物理上的 container。也就是說,介面設計應該是一項充滿創造性、富有樂趣的工作,但是卻往往被認為非常的枯燥和繁瑣。究其原因,是因為介面布局領域所採用的描述概念和具體的實現語言之間存在很大的語義隔閡。而一般的介面開發工具提供的所見即所得以及介面布局管理器等方案也無法很好地解決這個問題。

在本文中,我們會給出一種更好的解決方案,我們不是去試圖把介面設計者頭腦中的設計概念和樣式逐步降級、分解成所使用的實現語言能夠理解的低層概念,也不是提供一些已經完成的、確定的但難以擴充和更改的布局樣式庫供介面設計者使用。我們所提供的是一種專門用於描述高層介面設計樣式的語言。通過這種語言,介面設計者可以直接、明確地描述出他們頭腦中的布局設計樣式;通過這種語言,介面設計者可以自己方便地、靈活地制定自己需要的布局樣式。此外,本文中給出的設計思想對於其他領域的設計也有很好的借鑑作用。

創造性,還是乏味?

介面設計是一項非常有創造性,甚至富有藝術性的工作,乙個簡潔、易用、漂亮的介面在帶給使用者方便的同時,也會給介面設計者帶來極大的成就感。但是,在現實中,情況似乎並非如此,很多人都認為做介面是一項非常繁瑣、機械、乏味的工作,並千方百計地去逃避介面相關的工作。這是為什麼呢?

原因很簡單,因為做介面其實涉及兩項工作,一項是介面的一些設計創意,包括介面的布局樣式以及和使用者的互動方式,這項工作充滿挑戰和樂趣。但是,這些設計創意最終是要落實到實現上的,這就是第二項工作。此時,你頭腦中那些清晰、完整的設計概念開始變得瑣碎,你不得不和那些低層次的座標位置打交道。更糟糕的是,當你好不容易做好了乙個介面,但是發現其中某些元素的布局需要一些調整時,這個你本應認為是乙個很簡單的改變卻造成大量重複的低層次座標位置更改時,你肯定會認為做介面是多麼的機械和乏味呀!

其實,造成這種認識的根源在於介面設計創意和實現這些創意概念的語言之間存在很大的斷層。這樣,在具體實現時,你就必須得把這些清晰、完整的布局樣式降級成一些瑣碎、沒有什麼意義的低層次的座標值,使得實現語言能夠理解。這項工作不僅乏味,而且最終的實現也非常的脆弱 —— 乙個在布局樣式層面非常簡單的更改,就會造成實現層面的巨大變動。比如:我們可以說把一組元素同時按比例縮小 10%,做過介面的朋友肯定知道這個更改意味著什麼。

為了應對這個斷層的問題,目前幾乎所有的涉及介面製作的開發工具都提供了相同的解決方法:視覺化的介面設計工具以及布局管理器。但是這兩種方法都沒有從根本上解決這個問題。

視覺化介面設計工具確實避免了不少繁瑣的介面元素擺放工作,但是對於專業的介面設計來說,通過拖放設計出來的介面在準確度和規範性上都有待提高,此外還有更為重要的一點,那就是存在於設計者頭腦中的布局樣式仍然沒有被明確地描述出來,而是被降級成乙個個擺放在一起的零散的元件,雖然這些元件本身是可視的。這個語義斷層的存在同樣會使得通過視覺化介面設計工具設計出來的介面非常脆弱。

布局管理器試圖通過提供一些常用的布局樣式來解決這個問題。但是,這種做法非常僵化,也就是說你只能使用現有的布局管理器,如果它們無法滿足你的要求,你也無法自己定製。此外,這些布局管理器僅僅適合於一些簡單的情況。對於一些複雜的布局只要給定了乙個 rectangle 和乙個 container,乙個 component 就可以在介面上指定的布局位置呈現出來。

QT介面布局設計

方法 一 用qt設計器 1 以方便快捷的將需要的控制項拖放至適當的位置,並通過樣式簡單設定其顯示風格 2 右擊跳轉到槽,為控制項新增處理事件 說明 對應的檔案有 ui 介面顯示檔案 h cpp 處理事件所在的檔案 ui h 此檔案在編譯時生成,但是在qt工程中不顯示,其中內容為控制項的介面布局 方法...

形狀對介面布局設計的影響

我們日常生活中所了解的形狀各式各樣的,對我們生活影響極其大,比如地下水井蓋為程式設計客棧何做成圓形,電線桿的外形為何是圓形,高鐵火車頭前面為何是尖尖的,而不是方形等等,那麼在產品介面設計中,形狀對它的影響也是極其大,每一種樣式所傳達的感受是不同的,矩形 平行四邊形 圓形 三角形,其他不規則圖形,我把...

Android UI設計之介面布局

良好的布局對ui設計至關重要,就好像,乙個女人,只要五官端正,那麼稍微化點妝就美的不得了了呀,是吧。這介面布局就是ui的五官。不過,它的種類不是五個,是六個,也算是圖個吉利 分別是 相對布局 線性布局 布局 網格布局 幀布局 絕對布局。相對布局,英文名relativelayout,在eclipse中...