嵌套线性布局中的布局权重

时间:2015-02-22 06:41:34

标签: android android-layout

所以我希望在tic tac toe布局中有6个按钮,我正在使用嵌套的线性布局。

这是布局的xml文件:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:gravity="center"
    tools:context=".TicTacToeMainActivity$PlaceholderFragment">



    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/title"
        android:id="@+id/title"
        android:textSize="20dp" />

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:orientation="horizontal">



    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:layout_weight="1"
        android:id="@+id/topright"
        android:onClick="right_click" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:layout_weight="1"

        android:id="@+id/topcenter"
        android:onClick="right_click" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:layout_weight="1"

        android:id="@+id/topleft"
        android:onClick="right_click" />

</LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="horizontal">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            android:layout_weight="1"
            android:id="@+id/midright"
            android:onClick="right_click" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            android:layout_weight="1"

            android:id="@+id/midcenter"
            android:onClick="right_click" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            android:layout_weight="1"

            android:id="@+id/midleft"
            android:onClick="right_click" />

    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="horizontal">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            android:layout_weight="1"
            android:id="@+id/lowright"
            android:onClick="right_click" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            android:layout_weight="1"

            android:id="@+id/lowcenter"
            android:onClick="right_click" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            android:layout_weight="1"

            android:id="@+id/lowleft"
            android:onClick="right_click" />

    </LinearLayout>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/reset"
        android:id="@+id/reset"
        android:onClick="right_click" />
</LinearLayout>

然而,这会呈现以下屏幕:

enter image description here

如何让按钮调整大小,以便每行占用的空间与其他行相同,没有任何边距,如此截图中所示?同时忽略按钮中引用的方法,因为它们不是。

2 个答案:

答案 0 :(得分:2)

您需要进行两项更改

1。如果您将weight提交给LinearLayout,请写下layout_height="0dp"

2。按钮的高度必须为match_parent

所以你的布局看起来像,

<LinearLayout>
    <TextView>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"   //see the change here
        android:layout_weight="1"
        android:orientation="horizontal">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="match_parent" //change height to match_parent
            android:text=""
            android:layout_weight="1"
            android:id="@+id/topright"
            android:onClick="right_click" />

       //do same changes to rest two buttons within this LinearLayout

       .
       .
    </LinearLayout>

    <LinearLayout> //make same changes here

        <Button/>  //and here also
        <Button/>  //here also
        <Button/>  //here also
    </LinearrLayout>

    <LinearLayout> //make same changes here

        <Button/>  //and here also
        <Button/>  //here also
        <Button/>  //here also
    </LinearrLayout>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="reset"
        android:id="@+id/reset"
        android:onClick="right_click" />
</LinearLayout>

答案 1 :(得分:1)

wrap_content替换9 Button的{​​{1}}的所有实例。然后,为了补偿标题和底部按钮占用的间距,将3个水平方向match_parent s的高度更改为0dp。他们的布局重量为&#34; 1&#34;在标题和底部按钮布局后,应该使它们填满可用空间的三分之一。

在您的情况下,当您使用LinearLayout按钮时,按钮的大小应使其高度足以包含其中的文本。使用wrap_content会展开每个按钮(以及每个内部match_parent)以填充所有可用空间。