如何将GridLayout拉伸到其父级?

时间:2017-09-06 09:53:28

标签: android android-gridlayout

我正在尝试拉伸计算器的键盘(这是一个带有按钮的GridLayout)。它是一个5 * 4(列*行)。

  1. 我提供GridLayout android:layout_height="match_parent"android:layout_width="match_parent"以使其尺寸填满可用空间。然后
  2. 我将列和行索引分配给android:layout_columnandroid:layout_row的单元格。
  3. 我得到以下结果:

    1080×1920

    enter image description here

    细胞的宽度和高度均匀,但伸展不足以填满整个网格。所以我在网上搜索并看到我可以为每个单元格分配相同的权重,并且布局确定了填充整个网格的统一宽度和高度值。

    (旁边的问题:在这种情况下,android如何确定这些细胞的大小?为什么它不会使它们比这里的更大/更小?)

    所以我补充说:

    1. android:layout_weight="1"android:layout_height="1"到每个按钮
    2. 我得到了这个结果:

      1080×1920

      enter image description here

      真棒。看起来它按预期工作..直到我将分辨率更改为其他内容:

      480×800

      enter image description here

      或者如果我保持相同的 1080x1920 分辨率,但强制顶部的最小高度为280dp(279dp工作正常)

      enter image description here

      我该如何解决这个问题?我打算API级别21,我想强制GridLayout填充可用空间无论如何。我更喜欢按下按钮(甚至将内容剪掉/看不见),而不是拍摄屏幕。要完成这里是XML:

      main.axml

      <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:id="@+id/root">
      <!--Top section (screen + few keys)-->
          <LinearLayout
              android:style="@style/CalculatorScreenStyle"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:id="@+id/top">
              <Space
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:minHeight="280dp"/>
              <TextView
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:textSize="40sp"
                  android:hint="Enter a number here"/>
          </LinearLayout>
      <!-- Keyboard layout -->
          <GridLayout
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:id="@+id/keyboard"
              android:columnCount="4"
              android:rowCount="5">
              <Button
                  android:style="@style/CalculatorButtonStyle"
                  android:text="C"
                  android:id="@+id/clearButton"
                  android:layout_column="0"
                  android:layout_row="0" />
              <Button
                  android:style="@style/CalculatorButtonStyle"
                  android:text="Button"
                  android:id="@+id/button15"
                  android:layout_column="1"
                  android:layout_row="0" />
              <Button
                  android:style="@style/CalculatorButtonStyle"
                  android:text="%"
                  android:layout_column="2"
                  android:layout_row="0"
                  android:id="@+id/percentButton" />
              <Button
                  android:style="@style/CalculatorButtonStyle"
                  android:id="@+id/divideButton"
                  android:layout_column="3"
                  android:layout_row="0"
                  android:text="÷" />
              <Button
                  android:style="@style/CalculatorButtonStyle"
                  android:text="7"
                  android:layout_column="0"
                  android:layout_row="1"
                  android:id="@+id/sevenNumButton" />
              <Button
                  android:style="@style/CalculatorButtonStyle"
                  android:text="8"
                  android:layout_column="1"
                  android:layout_row="1"
                  android:id="@+id/eightNumButton" />
              <Button
                  android:style="@style/CalculatorButtonStyle"
                  android:text="9"
                  android:layout_column="2"
                  android:layout_row="1"
                  android:id="@+id/nineNumButton" />
              <Button
                  android:style="@style/CalculatorButtonStyle"
                  android:text="+"
                  android:layout_column="3"
                  android:layout_row="1"
                  android:id="@+id/plusButton" />
              <Button
                  android:style="@style/CalculatorButtonStyle"
                  android:text="4"
                  android:layout_column="0"
                  android:layout_row="2"
                  android:id="@+id/fourNumButton" />
              <Button
                  android:style="@style/CalculatorButtonStyle"
                  android:text="5"
                  android:layout_column="1"
                  android:layout_row="2"
                  android:id="@+id/fiveNumButton" />
              <Button
                  android:style="@style/CalculatorButtonStyle"
                  android:text="6"
                  android:layout_column="2"
                  android:layout_row="2"
                  android:id="@+id/sixNumButton" />
              <Button
                  android:style="@style/CalculatorButtonStyle"
                  android:text="x"
                  android:layout_column="3"
                  android:layout_row="2"
                  android:id="@+id/multiplyButton" />
              <Button
                  android:style="@style/CalculatorButtonStyle"
                  android:text="1"
                  android:layout_column="0"
                  android:layout_row="3"
                  android:id="@+id/oneNumButton" />
              <Button
                  android:style="@style/CalculatorButtonStyle"
                  android:text="2"
                  android:layout_column="1"
                  android:layout_row="3"
                  android:id="@+id/twoNumButton" />
              <Button
                  android:style="@style/CalculatorButtonStyle"
                  android:text="3"
                  android:layout_column="2"
                  android:layout_row="3"
                  android:id="@+id/threeNumButton" />
              <Button
                  android:style="@style/CalculatorButtonStyle"
                  android:text="-"
                  android:layout_column="3"
                  android:layout_row="3"
                  android:id="@+id/minusButton" />
              <Button
                  android:style="@style/CalculatorButtonStyle"
                  android:text="+/-"
                  android:layout_column="0"
                  android:layout_row="4"
                  android:id="@+id/signButton" />
              <Button
                  android:style="@style/CalculatorButtonStyle"
                  android:text="0"
                  android:layout_column="1"
                  android:layout_row="4"
                  android:id="@+id/zeroNumButton" />
              <Button
                  android:style="@style/CalculatorButtonStyle"
                  android:text="."
                  android:layout_column="2"
                  android:layout_row="4"
                  android:id="@+id/periodButton" />
              <Button
                  android:style="@style/CalculatorButtonStyle"
                  android:text="="
                  android:layout_column="3"
                  android:layout_row="4"
                  android:id="@+id/equalsButton" />
          </GridLayout>
      </LinearLayout>
      

      styles.xml

      <?xml version="1.0" encoding="utf-8"?>
      <resources>
        <style name="CalculatorButtonStyle" >
          <item name="android:textSize">22sp</item>
          <item name="android:layout_columnWeight">1</item>
          <item name="android:layout_rowWeight">1</item>
          <item name="android:background">#9E5EC2</item>
        </style>
        <style name="CalculatorScreenStyle">
          <item name="android:background">#ED59E8</item>
        </style>
      </resources>
      

      编辑:作为临时解决方案,我使用垂直LinearLayout横向LinearLayout s,并且我对所有Button s赋予相等的权重。它工作正常,但我想知道如果我必须模仿它自己的工作方式,GridLayout的用途是什么..

      enter image description here

1 个答案:

答案 0 :(得分:0)

当android api&lt; 21,它没有奏效。

所以我们可以添加编译。

<main>
    <div class="item"><img class="itemimg" src="media/pic1.JPG"                         alt="refresh!"><p>link1</p></div>
    <div class="item"><img class="itemimg" src="media/pic2.jpg"                 alt="refresh!"><p>link2</p></div>
    <div class="item"><img class="itemimg" src="media/pic3.jpg" alt="refresh!"><p>link2</p></div>
    <div class="item"><img class="itemimg" src="media/pic4.jpg" alt="refresh!"><p>link1</p></div>
    </main>

然后更改您的代码。

在XML代码中使用compile 'com.android.support:gridlayout-v7:25.3.1'

android.support.v7.widget.GridLayout

注意

它有新的属性。

  • 应用程式:layout_columnWeight
  • 应用程式:layout_rowWeight
  • 应用程式:layout_rowSpan
  • 应用程式:layout_columnSpan