2014-03-05 49 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);