【发布时间】:2019-07-01 09:03:10
【问题描述】:
我正在尝试拉伸计算器的键盘(这是一个内部带有按钮的 GridLayout)。它是 5*4(列*行)。
- 我给
GridLayoutandroid:layout_height="match_parent"和android:layout_width="match_parent"以使其尺寸填满可用空间。那么 - 我相应地将列和行索引分配给具有
android:layout_column和android:layout_row的单元格。
我得到以下结果:
1080x1920
单元格具有统一的宽度和高度,但不会拉伸到足以填满整个网格。所以我在网上搜索,发现我可以为每个单元格分配相同的权重,布局计算出一个统一的宽度和高度值,填充整个网格。
(附带问题:在这种情况下,android 如何确定这些单元格的大小?为什么不让它们比这里的更大/更小?)
所以我补充:
-
android:layout_weight="1"和android:layout_height="1"到每个按钮
我得到这个结果:
1080x1920
太棒了。看起来它正在按预期工作.. 直到我将分辨率更改为其他内容:
480x800
或者,如果我保持相同的 1080x1920 分辨率,但将顶部的最小高度强制为 280dp(279dp 可以正常工作)
我该如何解决这个问题?我打算使用 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 水平的LinearLayouts 并且我对所有Buttons 赋予相同的权重。它工作正常,但我想知道GridLayout 有什么用,如果我必须自己模拟它是如何工作的..
【问题讨论】:
-
你可以查看我的答案。
标签: android android-gridlayout