螢幕概念
在TouchGFX應用中,可以有任意數量的“螢幕”(下面的範例有兩個螢幕)。 TouchGFX中的螢幕是UI元素(小工具)及其相關事務邏輯的邏輯分組。 螢幕包含兩個類:包含該螢幕上顯示的所有小工具的View類,以及包含該螢幕的事務邏輯的Presenter類。
您可以選擇在單個螢幕的背景下實現整個應用(意味著只有一個View和一個Presenter),但我們建議將UI的不相關部分分割成不同螢幕,原因有兩個:
- TouchGFX包含記憶體分配方案,可自動分配大多數RAM占用量大的螢幕所需的必要RAM。 只會分配必要的量,此RAM區塊將在應用中的所有螢幕之間重複使用。
- 有多個螢幕會使UI程式碼的維護容易得多。
定義螢幕
關於應如何將應用劃分成多個螢幕,並沒有具體的規則,但有特定的指南,也許能説明您決定應當用哪些螢幕構成您的特定應用。 在視覺和功能上無關的UI區域應保存在不同螢幕中。
如果是十分簡單的有主溫度讀出顯示器和配置功能表的恒溫器應用,建議創建“主螢幕”用於溫度讀出,並創建“設置螢幕”用於顯示配置功能表。
主螢幕的視圖將包含用於背景圖像的小工具,幾個顯示溫度的文字區和一個用於切換至配置功能表的按鈕。 另一方面,用於配置的視圖可能包含顯示配置選項清單和不同背景圖像的小工具。 如果配置功能表能夠編輯許多不同類型的設置(日期、名稱和鍵盤、溫度、單位等),此螢幕的複雜性將大幅提升。
主螢幕的視圖將包含用於背景圖像的小工具,幾個顯示溫度的文字區和一個用於切換至配置功能表的按鈕。 另一方面,用於配置的視圖可能包含顯示配置選項清單和不同背景圖像的小工具。
當前活動螢幕
這種情況下,最好將配置功能表進一步分割成一個顯示完整功能表選項樹的螢幕和另一個用於編輯特定值的螢幕。 您會在專案開發的過程中學到這些。
如果從“後端”(所有執行恒溫器實際工作的非UI程式碼)或硬體外設接收到事件,則可以將這些事件委託給當前活動螢幕。
由於一些事件將只與應用中的特定螢幕有關,因此有效地隔離了問題。 例如,只有主螢幕才能處理通知當前溫度變化的已接收事件(將更新顯示當前溫度的文字區),而由於當前溫度未顯示在配置螢幕上,配置螢幕可以直接丟棄此無關事件。
TouchGFX中的Model-View-Presenter
由於一些事件將只與應用中的特定螢幕有關,因此有效地隔離了問題。 例如,只有主螢幕才能處理通知當前溫度變化的已接收事件(將更新顯示當前溫度的文字區),而由於當前溫度未顯示在配置螢幕上,配置螢幕可以直接丟棄此無關事件。 因此,在TouchGFX Designer中將新螢幕添加到應用時,會創建新的特定View類和Presenter類以代表該特定螢幕。
TouchGFX應用中MVP類的內容和責任如下。
Model
TouchGFX應用中MVP類的內容和責任如下。
- 保存UI的狀態資訊。 在切換螢幕時,View和Presenter的分配會被解除,因此它們不能用於存儲在螢幕轉換時應當保留的資訊。 為此,將改用Model。
- 作為面向後端系統的介面,向/從當前活動螢幕發送事件。
Model類是自動設置的,具有指向當前活動Presenter的指標。 當Model中發生變化時,將變化通知當前活動Presenter。 這是通過應用中ModelListener介面中的方法來完成的。
TouchGFX Designer生成的新應用將自動擁有可直接供UI使用的Model類。
View
View類(或者更具體地說,衍生自TouchGFX View類的類)包含了該視圖中顯示的小工具作為成員對象。 它還包含setupScreen
和tearDownScreen
函數,當進入/退出該螢幕時,會自動呼叫它們。 通常會在setupScreen
函數中配置小工具。
View還將包含指向相關Presenter的指標。 該指標通過框架自動設置。 您可以使用該指標與Presenter進行UI事件(如按鈕點擊)通信。
Presenter
View還將包含指向相關Presenter的指標。 該指標通過框架自動設置。 您可以使用該指標與Presenter進行UI事件(如按鈕點擊)通信。