【问题标题】:Android: create square cell tableAndroid:创建方形单元格表
【发布时间】:2013-11-10 21:40:28
【问题描述】:

我正在为 android 设计一个基本的井字游戏,作为我的“Hello World”项目。 我想要一个 3x3 表格,其中所有单元格都是正方形。

如果其中的任何单元格中没有任何内容,我所做的方式会使列缩小。 我正在尝试使用 GridLayout 中的 9 个 TextView。

我欢迎所有这样做的建议。

我的方式是这样的——

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    style="@style/LayoutStyle"
    tools:context=".GameBoard">


    <GridLayout
        style="@style/GameBoardGrid"
        android:id="@+id/gridTitle">

        <TextView
            android:id="@+id/tile00"
            style="@style/GameTile"
            android:layout_column="0"
            android:layout_row="0"
            android:text=""/>

        <TextView
            android:id="@+id/tile01"
            style="@style/GameTile"
            android:layout_column="1"
            android:layout_row="0"
            android:text="X"/>

        <TextView
            android:id="@+id/tile02"
            style="@style/GameTile"
            android:layout_column="2"
            android:layout_row="0"
            android:text="O"/>

        <TextView
            android:id="@+id/tile10"
            style="@style/GameTile"
            android:layout_column="0"
            android:layout_row="1"
            android:text=""/>

        <TextView
            android:id="@+id/tile11"
            style="@style/GameTile"
            android:layout_column="1"
            android:layout_row="1"
            android:text="O"/>

        <TextView
            android:id="@+id/tile12"
            style="@style/GameTile"
            android:layout_column="2"
            android:layout_row="1"
            android:text="X"/>

        <TextView
            android:id="@+id/tile20"
            style="@style/GameTile"
            android:layout_column="0"
            android:layout_row="2"
            android:text=""/>

        <TextView
            android:id="@+id/tile21"
            style="@style/GameTile"
            android:layout_column="1"
            android:layout_row="2"
            android:text="X"/>

        <TextView
            android:id="@+id/tile22"
            style="@style/GameTile"
            android:layout_column="2"
            android:layout_row="2"
            android:text="O"/>

    </GridLayout>

</RelativeLayout>

哪里,GameTile的样式是-

<style name="GameTile">
    <item name="android:textSize">60sp</item>
    <item name="android:layout_gravity">fill</item>
    <item name="android:gravity">center</item>
    <item name="android:paddingLeft">@dimen/padding_grid_text</item>
    <item name="android:paddingRight">@dimen/padding_grid_text</item>
    <item name="android:fontFamily">Roboto-Thin</item>
    <item name="android:background">@color/gray</item>
    <item name="android:layout_margin">@dimen/margin_grid_cell</item>
    <item name="android:layout_weight">1</item>
</style>

【问题讨论】:

  • 我建议您改用LinearLayout。发布您的 XML!
  • 我认为你应该有 " "(space) 而不是 ""(empty string) 并且一切都应该没问题..
  • 这没有帮助,当我将所有“”替换为“”时,它仍然会缩小前 2 列(可能是为了换行),保持最后一列相当宽

标签: android textview android-ui android-tablelayout android-gridlayout


【解决方案1】:

将您的GridLayout 更改为LinearLayout,如下所示:

    <TextView
            android:id="@+id/tile00"
            style="@style/GameTile"
            android:text=" "/>

    <TextView
            android:id="@+id/tile01"
            style="@style/GameTile"
            android:text="X"/>

    <TextView
            android:id="@+id/tile02"
            style="@style/GameTile"
            android:text="O"/>

</LinearLayout>
<LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/gridTitle">

    <TextView
            android:id="@+id/tile10"
            style="@style/GameTile"
            android:text=""/>

    <TextView
            android:id="@+id/tile11"
            style="@style/GameTile"
            android:text="O"/>

    <TextView
            android:id="@+id/tile12"
            style="@style/GameTile"
            android:text="X"/>

</LinearLayout>
<LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/gridTitle">

    <TextView
            android:id="@+id/tile20"
            style="@style/GameTile"
            android:text=""/>

    <TextView
            android:id="@+id/tile21"
            style="@style/GameTile"
            android:text="X"/>

    <TextView
            android:id="@+id/tile22"
            style="@style/GameTile"
            android:text="O"/>

</LinearLayout>

你的风格是:

<style name="GameTile">
    <item name="android:textSize">60sp</item>
    <item name="android:layout_gravity">fill</item>
    <item name="android:gravity">center</item>
    <item name="android:paddingLeft">@dimen/padding_grid_text</item>
    <item name="android:paddingRight">@dimen/padding_grid_text</item>
    <item name="android:fontFamily">Roboto-Thin</item>
    <item name="android:background">@color/gray</item>
    <item name="android:layout_margin">@dimen/margin_grid_cell</item>
    <item name="android:layout_weight">1</item>
    <item name="android:layout_width">0dp</item>
    <item name="android:layout_height">wrap_content</item>
</style>

【讨论】:

  • 这是一个很好的解决方案,但我真正的问题是 Height 设置为 wrap_content 并且它不等于 width 从而导致矩形
  • 我明白了。对于这种情况,最好使用dp 值来固定布局的高度和宽度。
  • 是的。我想那是现在唯一的选择。谢谢您的帮助。欣赏它。
猜你喜欢
  • 1970-01-01
  • 2013-08-19
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 2014-05-15
  • 2017-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多