2014-03-05 50 views
0

我知道提供垂直和水平佈局的默認方式是創建兩個xml文件,一個在佈局中,另一個在layout-land dirs中。android在一個文件中的水平和垂直佈局

但是,當我有非常大的佈局,只有非常小的部分將取決於方向,我寧願避免創建兩個文件,因爲它可能難以保持它們的同步(例如,我會改變一些東西,並會忘記在第二個改變)。

我想知道是否有其他方式,例如。例如:

common part 

if orientation==vertical 

part of xml vertical layout definition 

if orientation==horizontal 

part of xml horizontal layout definition 

common part 

任何想法?

回答

1

使一個單一的佈局,並進入該文件提出兩個parrent視圖之一可見,一個走了,並使用約在佈局使用<include>標籤

 @Override 
     public void onConfigurationChanged(Configuration newConfig) { 
      super.onConfigurationChanged(newConfig); 
      if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {//play with visibilities} 
else 
{//same 

}

+0

有趣的想法,但如果我使用相同的組件的ID,這將導致問題....如果我使用不同的,我將必須在我的代碼中加倍... – user2707175

+0

會使它們加倍但避免很多問題 –

+0

這也是我的解決方案(但您應該使用支持的框架,而不是解決此問題)。 – Booger

1

什麼?這將最終創建三個XML文件,一個適用於所有方向的「大」文件,然後是一個較小的橫向和一個較小的縱向XML佈局,僅用於每個方向不同的部分。

更多信息請參見第<include>

+0

我還沒有檢查過它是否可用,但這似乎是我正在尋找的解決方案.... – user2707175

0

Layout Resource在單個佈局文件創建佈局元素(RelativeLayout的或LinearLayout中,無論你正在使用)。然後根據方向控制代碼的可見性。

(這樣,我建議將工作,但你的方式最好使用資源框架Android提供了這一點 - 而不是邊踩着它像你提出 - 但是這不是你的問題)

像這個僞代碼:

<LinearLayout> 
    <!-- Horizontal Layout --> 
    <RelativeLayout 
     android:visibility="gone" /> 

    <!-- Vertical Layout --> 
    <RelativeLayout 
      android:visibility="visible" /> 
</LinearLayout> 

然後在Java中:

if (horizontal) { 
    horizView.setVisibility(View.VISIBLE); 
    vertView.setVisibility(View.GONE);