Android重复使用横向和纵向布局

时间:2013-10-18 15:03:36

标签: android android-layout landscape-portrait

是否可以将参数传递给android中的包含布局?我想要做的是在横向模式下在水平LinearLayout中显示一组按钮,并使用相同的包括将LinearLayout的方向更改为“垂直”。

<include layout="buttons.xml" orientation="horizontal"/>

在用于纵向模式的布局XML中,我想这样做:

<include layout="buttons.xml" orientation="vertical"/>

在buttons.xml中我会:

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="doSomething"
        android:text="foo" >
    </Button>


    <Button
        android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="doSomethingElse"
        android:text="bar" >
    </Button>

如果我正确解释文档,则只能覆盖include的布局*属性。

在没有复制布局xml的情况下,还有其他方法/解决方法吗? 感谢您的投入!

3 个答案:

答案 0 :(得分:4)

Android通过为不同的配置提供不同的文件夹来解决这个问题。

来自文档:

  

另一个例子是,这是一个项目,其中包含横向方向的替代布局:

     

MyProject的/

     

RES /         布局/

       main.xml

   layout-land/

       main.xml
     

默认情况下,layout / main.xml文件用于纵向方向。

我相信你应该这样做,因为这是文档中推荐的方式,但如果你决定control orientation changes,你可以改变你的方向。

并使用它来更改布局方向:

LinearLayout layout = (get layout from view);
layout.setOrientation(LinearLayout.VERTICAL);

layout.setOrientation(LinearLayout.HORIZONTAL); 

答案 1 :(得分:2)

这有点晚了,但这是另一种不分割布局的可能性:您还可以在xml文件中设置LinearLayout的方向值。由于方向值为整数(0:水平,1:垂直),您也可以使用这种方式:

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="@integer/orientation" >

然后在xml-files中设置/覆盖此方向值:

<强> dimens.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="orientation">1</integer>   <!-- vertical //-->
</resources>

<强>梦诗-land.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="orientation">0</integer>   <!-- horizontal //-->
</resources>

答案 2 :(得分:0)

好吧我最后做的是将我的布局分成三部分:

button_container.xml只包含一个LinearLayout和另外两个包含

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:orientation="**horizontal**" >

   <include layout="@layout/button_top_row" />
   <include layout="@layout/button_bottom_row" />

</LinearLayout>
  • button_row_top包含应位于顶行(在手持设备端口视图中)的按钮

-button_row_bottom包含应位于底行的按钮(同样在手持端口视图中)

button_container.xml存在两个版本,一个是水平方向(对于平板电脑,面向landsacpe的移动手持设备)和一个方向垂直的版本(对于手持端口)。 所以我设法以某种方式最小化代码重叠,即使它不像我希望的那样容易。

欢迎任何其他提示。 再见, 马库斯