替代版面配置檢視

本主題說明如何使用資源限定符來版本配置。 例如,建立只有在裝置處於橫向模式且只針對直向模式的版面配置版本時才會使用的版面配置。

建立替代版面配置

當您按兩下 [替代版面配置檢視] 圖示(裝置左側),預覽窗格隨即開啟,以列出專案中可用的替代版面配置。 如果沒有替代的版面配置,則會 顯示 [預設 ] 檢視:

Alternate layout view pane

當您按兩下 [新版本] 旁的綠色加號時,[建立配置變化] 對話框隨即開啟,讓您可以選取此版面配置變化的資源限定符:

Create layout variation

在下列範例中,螢幕方向的資源限定符會設定為 [橫向],而 [螢幕大小] 會變更為 [大型]。 這會建立名為 large-land 的新版面配置版本:

Large-land variation

請注意,左側的預覽窗格會顯示資源限定符選取的效果。 按兩下 [新增 ] 會建立替代版面配置,並將設計工具切換至該版面配置。 [ 替代版面配置檢視 ] 預覽窗格會指出透過小型右指標載入設計工具的版面配置,如下列螢幕快照所示:

Loaded layout indicator

編輯替代版面配置

當您建立替代版面配置時,通常需要進行單一變更,以套用至配置的所有分支版本。 例如,您可能想要將所有版面配置中的按鈕文字變更為黃色。 如果您有大量的版面配置,而且需要將單一變更傳播到所有版本,維護可能會變得繁瑣且容易出錯。

為了簡化多個版面配置版本的維護,設計工具提供 多編輯 模式,將變更傳播到一或多個版面配置。 出現多個版面配置時, 會顯示多編輯 圖示:

Multi-edit icon

當您按兩下 [多重編輯] 圖示時,會出現一行,指出版面配置已連結(如下所示):也就是說,當您變更一個版面配置時,該變更會傳播至任何連結的配置。 您可以按下列螢幕快照中指出的圓形圖示來取消連結所有版面設定:

Unlink all layouts

如果您有兩個以上的版面配置,可以選擇性地將編輯按鈕切換至每個版面配置預覽的左邊,以判斷哪些版面配置會連結在一起。 例如,如果您想要進行傳播至三個版面配置中第一個和最後一個的單一變更,您必須先取消鏈接中間版面配置,如下所示:

Unlink middle layout

在此範例中,對 [預設] 或 [長版面配置] 所做的變更將會傳播至其他版面配置,但不會傳播到大型版面配置。

多重編輯範例

一般而言,當您變更一個版面配置時,相同的變更會傳播到所有其他連結的配置。 例如,將新的 TextView 小工具新增至 [預設 ] 配置,並將其文字字串變更為 Portrait ,會導致對所有連結的配置進行相同的變更。 以下是預設版面設定的外觀

Add TextView

TextView也會新增至大型陸地版面配置檢視,因為它已連結至默認版面配置:

Landscape TextView

但是,如果您想要對只有一個版面配置進行本機變更,該怎麼辦(也就是說,您不希望將變更傳播至任何其他版面配置) ? 若要這樣做,您必須取消連結您想要在修改之前變更的配置,如下所述。

進行本機變更

假設我們希望這兩個版面配置都新增 TextView,但我們也想要將大陸版面配置中的文字字串變更為 Landscape ,而不是 Portrait。 如果我們在兩個版面配置都連結時對大型土地進行這項變更,則變更會傳播回預設版面配置。 因此,在進行變更之前,我們必須先取消連結這兩個版面配置。 當我們將大陸中的文字修改為 Landscape時,設計工具會以紅色框架標示此變更,以指出變更是大型土地面配置的區域,而且不會傳播回預設版面配置:

Local change

當您按下[ 預設 設定] 來檢視它時, TextView 文字字串仍會設定為 Portrait

處理衝突

如果您決定將預設版面配置中的文字色彩變更為綠色,您會看到連結的版面配置上會出現警告圖示。 按兩下該版面配置會開啟配置以顯示衝突。 造成衝突的小工具會以紅色框架反白顯示,並顯示下列訊息: 最近所做的變更已造成此替代版面配置中的衝突。

Conflicting change

小工具右側會顯示衝突方塊,以說明衝突:

Conflict warning

衝突方塊會顯示已變更的屬性清單,並列出其值。 按兩下 [ 忽略衝突] 只會將屬性變更套用至這個小工具。 按兩下 [套 用] 會將屬性變更套用至這個小工具,以及連結 的 [預設 ] 配置中的對應小工具。 如果套用所有屬性變更,就會自動捨棄衝突。

檢視群組衝突

屬性變更不是衝突的唯一來源。 插入或移除小工具時,可以偵測到衝突。 例如,當大型土地配置與預設版面配置取消連結,而TextView大型土地配置中的 會拖曳並放在上方Button時,設計工具會將移動的小工具標示為指出衝突:

View group conflict

不過,在上 Button沒有標記。 雖然 的位置Button已變更,但 Button 不會顯示大型土地組態特有的套用變更。

CheckBox如果 新增至預設版面配置,則會產生另一個衝突,並在大型陸地配置上顯示警告圖示:

Checkbox conflict

按兩下大型土地配置會顯示衝突。 隨即顯示下列訊息: 最近所做的變更已造成此替代配置中的衝突:

Alt layout conflict

此外,衝突方塊會顯示下列訊息:

Conflict message

CheckBox新增 會導致衝突,因為大型土地配置在 包含它的 中有LinearLayout變更。 不過,在此情況下,衝突方塊會顯示剛插入 [ 預設 ] 配置中的小工具 (the CheckBox)。

如果您按兩下 [ 忽略衝突],設計工具就會解決衝突,讓衝突方塊中顯示的小工具被拖曳並放入遺漏小工具的配置中(在此情況下為 大型陸地 配置):

Resolved group conflict

如上一個範例ButtonCheckBox所示,沒有紅色變更標記,因為 只有 LinearLayout 已套用在大型土地配置中的變更。

衝突持續性

衝突會以 XML 批注的形式保存在版面配置檔案中,如下所示:

<!-- Widget Inserted Conflict | id:__root__ | @+id/checkBox1 -->

因此,當專案關閉並重新開啟時,所有衝突仍會存在,即使是忽略的專案也一律存在。