Android中心内部布局

时间:2011-10-28 14:35:10

标签: android xml android-layout

我需要一个盒子里的盒子,第一个盒子顶部约有33%的空房间,然后是另一个盒子。我需要它集中在一起。我想在移动电话上基本上fill_parent,但在平板电脑(此应用程序的主要设备)上,它应该保持相同的大小,但是在屏幕中间居中。我怎么能这样做?

我包括了一些例子,因为我有点难以解释。

移动

|---------------------------|
|     ~33% Blank space      |
|                           |
|  |---------------------|  |
|  |                     |  |
|  |                     |  |
|  |      Login Box      |  |
|  |      Password       |  |
|  |                     |  |
|  |                     |  |
|  |                     |  |
|  |                     |  |
|  |                     |  |
|  |---------------------|  |
|---------------------------| 

平板

|---------------------------------------|
|           ~33% Blank space            |
|                                       |
|        |---------------------|        |
|        |                     |        |
|        |                     |        |
|        |      Login Box      |        |
|        |      Password       |        |
|        |                     |        |
|        |                     |        |
|        |                     |        |
|        |                     |        |
|        |                     |        |
|        |---------------------|        |
|---------------------------------------| 

编辑以下是我目前拥有的XML。我没有得到智能感知(我通常得到建议),而且我得到了一个具有多个布局的强制转换异常。 XML有问题吗?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:weightSum="1"
    >
    <LinearLayout android:id="@+id/topSpacer"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight=".33"
        android:orientation="horizontal"
        ></LinearLayout>
    <LinearLayout
        android:id="@+id/bottomSection"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight=".67"
        android:orientation="horizontal"
        >
        <LinearLayout
            android:id="@+id/loginSection"
            android:layout_width="320dip"
            android:layout_height="fill_parent"
            android:background="#FFFFFF"
            >
            <TextView
                android:text="" 
                android:id="@+id/errorMessage" 
                android:layout_height="wrap_content" 
                android:layout_width="fill_parent" 
            />
            <TextView 
                android:text="Please login using your active directory credentials." 
                android:id="@+id/loginMessage" 
                android:layout_height="wrap_content" 
                android:layout_width="fill_parent" 
            />
            <AutoCompleteTextView 
                android:id="@+id/loginUsername" 
                android:text="Username" 
                android:layout_width="fill_parent" 
                android:layout_height="wrap_content" 
            />
            <EditText
                android:id="@+id/loginPassword"
                android:text="Password"
                android:password="true"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
            />
            <Button
                android:id="@+id/loginButton"
                android:text="Login"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
            />
            <TextView 
                android:text="results" 
                android:id="@+id/resultsMessage" 
                android:layout_height="wrap_content" 
                android:layout_width="fill_parent" 
            />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

2 个答案:

答案 0 :(得分:1)

尝试使用weightSum属性的线性布局组合。另请注意,内盒的宽度是固定的,就像您在平板电脑上提到的那样,您不希望它重新调整尺寸。

试试这个:

* 编辑:我使用相对布局来使内框居中*

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical"
  android:weightSum="1">
<LinearLayout android:id="@+id/thirtyThreePercentSpacer" 
        android:layout_width="fill_parent" 
        android:orientation="horizontal"
        android:layout_height="0dp"
        android:layout_weight=".33">
</LinearLayout>
<RelativeLayout android:id="@+id/RelativeLayout01" 
    android:layout_width="fill_parent" 
    android:layout_height="0dp"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_weight=".67">

            <LinearLayout android:id="@+id/innerBox" 
                    android:layout_width="320dip" 
                    android:layout_height="fill_parent"
                    android:layout_centerInParent="true">
            </LinearLayout>

  </RelativeLayout>
</LinearLayout>

答案 1 :(得分:1)

您可以为智能手机和平板电脑使用不同的布局。

将它放在layout文件夹中:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
    </FrameLayout>

    <LinearLayout
        android:layout_width="200dp"
        android:layout_height="0dp"
        android:layout_gravity="center_horizontal"
        android:layout_weight="2"
        android:gravity="center"
        android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="login box"/>
    </LinearLayout>

</LinearLayout>

对于平板电脑,您可以在layout-large下使用类似的内容:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
    </FrameLayout>

    <LinearLayout
        android:layout_width="200dp"
        android:layout_height="0dp"
        android:layout_gravity="center_horizontal"
        android:layout_weight="2"
        android:gravity="center"
        android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="login box"/>
    </LinearLayout>

</LinearLayout>

在这种情况下,您应该根据需要调整登录框的宽度。

 也许你可以使用相同的布局做一些事情,但一般来说这些设备类的布局会有很大不同。为了改善这一点,您可以设计一次登录框,并从这些布局include设计它(参见http://developer.android.com/resources/articles/layout-tricks-reuse.html)。