5

我有一个像计算器一样的布局,每行有 4 个按钮,大约有 5 行。我通过使用创建了这些每一行LinearLayout。我已经设法通过android:layout_weight="1"在每个按钮中使用来完全填充每一行的宽度LinearLayout。但我不知道如何以这种方式填充垂直空间。五行后,底部有剩余空间用于普通 XDPI 屏幕(Nexus 4)

<LinearLayout
        android:id="@+id/first_row"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/entry">

    <Button
            android:id="@+id/seven"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:text="7"
            android:textColor="@color/Blue_ICS"
            android:textSize="@dimen/button_text_size"
            />

    <Button
            android:id="@+id/eight"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:text="8"
            android:textColor="@color/Blue_ICS"

            android:textSize="@dimen/button_text_size"/>

    <Button
            android:id="@+id/nine"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:text="9"

            android:textColor="@color/Blue_ICS"
            android:textSize="@dimen/button_text_size"/>

    <Button
            android:id="@+id/plus"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:text="+"
            android:textColor="@color/Blue_ICS"
            android:textSize="@dimen/button_text_size"/>
</LinearLayout>

布局太长,所以我在这里只分享第一行的代码,其余行也一样。

4

4 回答 4

7

您应该使用TableLayout, 替换 TableRow 的所有 LinearLayout。属性stretchColumns 允许您使所有列具有相同的宽度,而无需使用权重。这样您就可以使用权重来处理 TableRow 的高度。

在下面的示例中,我什至添加了一些空间(空的 LinearLayout)来显示结果,例如计算器屏幕。我希望这就是你要找的!(您必须更改ID)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/outerLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<LinearLayout
    android:id="@+id/screenLayout"
    android:layout_width="fill_parent"
    android:layout_height="150dp"
    android:orientation="vertical"></LinearLayout>

<TableLayout
    android:id="@+id/myLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_below="@+id/screenLayout"
    android:stretchColumns="*" >

    <TableRow
        android:id="@+id/first_row"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1" >

        <Button
            android:id="@+id/seven"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:text="7" />

        <Button
            android:id="@+id/eight"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:text="8" />

        <Button
            android:id="@+id/nine"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:text="9" />

        <Button
            android:id="@+id/plus"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:text="+" />
    </TableRow>

    <TableRow
        android:id="@+id/first_row"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1" >

        <Button
            android:id="@+id/seven"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:text="4" />

        <Button
            android:id="@+id/eight"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:text="5" />

        <Button
            android:id="@+id/nine"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:text="6" />

        <Button
            android:id="@+id/plus"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:text="-" />
    </TableRow>

    <TableRow
        android:id="@+id/first_row"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1" >

        <Button
            android:id="@+id/seven"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:text="1" />

        <Button
            android:id="@+id/eight"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:text="2" />

        <Button
            android:id="@+id/nine"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:text="3" />

        <Button
            android:id="@+id/plus"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:text="*" />
    </TableRow>

    <TableRow
        android:id="@+id/first_row"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1" >

        <Button
            android:id="@+id/seven"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:text="0" />

        <Button
            android:id="@+id/eight"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:text="," />

        <Button
            android:id="@+id/nine"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:text="/" />

        <Button
            android:id="@+id/plus"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:text="=" />
    </TableRow>
</TableLayout>

</RelativeLayout>

结果:

在此处输入图像描述

于 2013-06-04T07:17:17.047 回答
3

如果你的父母LinearLayout也是,你也可以android:layout_weight="1"在你的行上使用。

<!--parent-->
<LinearLayout
   android:layout_height="match_parent"
   android:layout_width="match_parent"
   android:orientation="vertical">

   <include
      android:layout="@layout/myrow"
      android:layout_height="0dp"
      android:layout_width="match_parent"
      android:layout_weight="1"/>

   <include
      android:layout="@layout/myrow"
      android:layout_height="0dp"
      android:layout_width="match_parent"
      android:layout_weight="1"/>

   <include
      android:layout="@layout/myrow"
      android:layout_height="0dp"
      android:layout_width="match_parent"
      android:layout_weight="1"/>

   <include
      android:layout="@layout/myrow"
      android:layout_height="0dp"
      android:layout_width="match_parent"
      android:layout_weight="1"/>

   <include
      android:layout="@layout/myrow"
      android:layout_height="0dp"
      android:layout_width="match_parent"
      android:layout_weight="1"/>


</LinearLayout>

没有测试它,但它应该工作。

希望这可以帮助

于 2013-06-04T07:17:05.203 回答
0

尝试这个:

    <LinearLayout
         android:id="@+id/first_row"
         android:layout_width="fill_parent"
         android:layout_height="0dp"
         android:layout_weight="1">
         ...
    </LinearLayout>

    <LinearLayout
         android:id="@+id/first_row"
         android:layout_width="fill_parent"
         android:layout_height="0dp"
         android:layout_weight="1">
         ...
    </LinearLayout>
    ...

等等。将所有这些包装成垂直方向的线性布局

于 2013-06-04T07:21:00.247 回答
0

You can try the following...(PseudoCode):(Hope u understand the logic... This works.. it stretches the button on any screen density)

      <linearlayout=Outer
          horizontal
          weightSum=5>
              <sub linearLayout=innerRow1
                   vertical
                   weightSum=1>
                   <enter all the buttons with weight as ".25">
              </sub innerRow1>
               <sub linearLayout=innerRow2
                   vertical
                   weightSum=1>
                   <enter all the buttons with weight as ".25">
              </sub innerRow2>
              <sub linearLayout=innerRow3
                   vertical
                   weightSum=1>
                   <enter all the buttons with weight as ".25">
              </sub innerRow3>
             <sub linearLayout=innerRow4
                   vertical
                   weightSum=1>
                   <enter all the buttons with weight as ".25">
              </sub innerRow4>
             <sub linearLayout=innerRow5
                   vertical
                   weightSum=1>
                   <enter all the buttons with weight as ".25">
              </sub innerRow5>
于 2013-06-04T07:24:08.643 回答