我正在开发我的第一个Android应用程序。它是游戏tictactoe的复制品。该应用程序的后端工作正常。用户界面也很完美。我的问题是UI的显示。该应用程序包含9个3x3阵型的正方形。当选择一个正方形时,它将被当前的玩家正方形(drawable)替换。我一直在使用Nexus 5模拟器进行测试。我很满意。作为最终测试,我使用Nexus one仿真器运行应用程序,3x3网格不正确。最初我尝试使用toRightOf,toLeftOf,below,above,alignBaseline,alignTop等XML布局代码在LinearLayout中显示3x3网格,以使网格正确放置。在Nexus one仿真器中打开时,方块重叠(我假设方块的大小太大)但在Nexus 5仿真器中看起来很好。我将布局更改为GridLayout,修复了重叠但网格现在溢出了屏幕。您可以在http://imadsayed.com/GridLayout_Overflowing.html或此处查看我的应用的用户界面; GridLayout Overflow on Nexus One(左侧的模拟器是Nexus 5,其中UI正确,右侧的模拟器是Nexus One,显示溢出,您可能需要向下滚动才能看到)。 通过在线发现的其他建议,Ive尝试将GridLayout的每一行放在LinearLayout中,并将它们对齐在1x3 GridLayout中。这会使网格不溢出,但网格的最后一列比前两列具有更小的正方形。所以我撤消了这个,现在坐在一个满溢的网格。代码如下所示:
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="center">
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:rowCount="3"
android:columnCount="3"
>
<!-- tl -->
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tl"
android:src="@drawable/square"
android:layout_row="0"
android:layout_column="0"
android:layout_rowWeight="1"
android:contentDescription="@null"
/>
</GridLayout>
</LinearLayout>
我只粘贴了一个正方形(ImageView),其中有9个在我的代码中但除了行号和列号之外都是相同的。评论&#34; tl&#34;适用于topLeft。这是左上角的广场。整个GridLayout在LinearLayout中,因此我可以将网格置于屏幕中心,如Nexus 5仿真器中所示。 那么我怎么能创建UI,这样如果它溢出,那么它可以重新调整网格及其子节点(正方形),使它们都适合屏幕?类似的帖子只讨论GridLayout中的两列,通常其中一列的文本不相关。
答案 0 :(得分:1)
我找到了解决方案。最后我将GridLayout设置为3行1列。及其宽度和父宽度为match_parent。每行上的LinearLayout及其子项的宽度设置为wrap_content。 ImageViews本身就是那些LinearLayouts的子代,解决方案的关键部分是它们的layout_weight等于“0.3”。不需要引力或其他任何东西。 layout_weight =“0.3”,ImageViews的屏幕大小为1/3,GridLayout的父元素宽度设置为match_parent。
答案 1 :(得分:0)
如果将gridlayout的宽度设置为match_parent并确保其父视图的宽度为match_parent,则视图不应超出屏幕范围。