如何使用权重以编程方式使用TableLayout排列Gridview项目

时间:2013-05-05 21:50:32

标签: android android-layout gridview android-tablelayout

我正在研究Suduko求解器应用。我希望布局在9个Gridview中有9x9 TextView。我想在它们下面放两个按钮(Solve,clear)。我已经做到了,但它可能不适用于小型设备(无法看到按钮和网格视图转为可滚动,不适合屏幕)

以下是我如何将Textviews添加到Gridview

gridView = (GridView) findViewById(R.id.gridView1);
String[] arrayEmpty = new String[] {"", "", "", "", "", "", "", "", ""};
ArrayList<String> listEmpty = new ArrayList<String>(Arrays.asList(arrayEmpty));
gridView.setAdapter(new ArrayAdapter<String>(this,R.layout.list_item,list));

这是我的Layout.XML

<?xml version="1.0" encoding="utf-8"?>

<TableRow android:id="@+id/tableRow1"
    android:layout_width="match_parent"
    android:background="#999999"
    android:layout_weight="1"
    android:layout_height="match_parent">

    <GridView
    android:id="@+id/gridView1"
    android:clickable="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="2dp"
    android:background="#5C5C5C"
    android:layout_weight="1"
    android:numColumns="3" >
    </GridView>

    <GridView
    android:id="@+id/gridView2"
    android:clickable="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="2dp"
    android:background="#5C5C5C"
    android:layout_weight="1"
    android:numColumns="3" >
</GridView>

<GridView
    android:id="@+id/gridView3"
    android:clickable="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="2dp"
    android:background="#5C5C5C"
    android:layout_weight="1"
    android:numColumns="3" >
</GridView>

<TableRow android:id="@+id/tableRow2"
    android:layout_width="match_parent"
    android:background="#999999"
    android:layout_weight="1"
    android:layout_height="match_parent">

    <GridView
    android:id="@+id/gridView4"
    android:clickable="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="2dp"
    android:background="#5C5C5C"
    android:layout_weight="1"
    android:numColumns="3" >
    </GridView>

    <GridView
    android:id="@+id/gridView5"
    android:clickable="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="2dp"
    android:background="#5C5C5C"
    android:layout_weight="1"
    android:numColumns="3" >
</GridView>

<GridView
    android:id="@+id/gridView6"
    android:clickable="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="2dp"
    android:background="#5C5C5C"
    android:layout_weight="1"
    android:numColumns="3" >
</GridView>

<TableRow android:id="@+id/tableRow3"
    android:layout_width="match_parent"
    android:background="#999999"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:layout_marginBottom="15dp">

    <GridView
    android:id="@+id/gridView7"
    android:clickable="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="2dp"
    android:background="#5C5C5C"
    android:layout_weight="1"
    android:numColumns="3" >
    </GridView>

    <GridView
    android:id="@+id/gridView8"
    android:clickable="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="2dp"
    android:background="#5C5C5C"
    android:layout_weight="1"
    android:numColumns="3" >
</GridView>

<GridView
    android:id="@+id/gridView9"
    android:clickable="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="2dp"
    android:background="#5C5C5C"
    android:layout_weight="1"
    android:numColumns="3" >
</GridView>

<TableRow android:layout_weight="1" android:layout_height="match_parent">
    <Button
        android:id="@+id/solve_button"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="5dp"
        android:layout_weight="1"
        android:text="@string/solve" />
    <Button
        android:id="@+id/clear_button"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="5dp"
        android:layout_weight="1"
        android:text="@string/_clear" />
</TableRow>

这是我enter image description here

的屏幕截图

但这就是我需要将布局与所有设备配合使用。也许我应该使用重量,但我不知道如何

enter image description here

2 个答案:

答案 0 :(得分:2)

检查这个数独项目 -

Git Hub

另外

Check This

在这里您可以找到数独的布局和源代码以及其他有用的东西。

答案 1 :(得分:2)

这是一个技巧:对于完全统一的表或网格,您根本不需要TableView或GridView。只需将LinearLayout中的所有内容放在size = 0和layoutWeight = 1中即可。那个大小= 0似乎是违反直觉的,但结合layoutWeight = 1,它可以让所有子小部件的大小完全相同,无论其内容如何。

所以做这样的事情:

<!-- Outer container; a vertical layout that fills the screen -->
<LinearLayout
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
  <!-- first row -->
  <LinearLayout
      android:orientation="horizontal"
      android:layout_width="fill_parent"
      android:layout_height="0dp"
      android:layout_weight="1">
    <!-- contents of the first row -->
    <!-- first item in first row -->
    <View
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1" />
    <!-- second item in first row -->
    <View
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1" />
    <!-- third item in first row -->
    <View
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1" />
  </LinearLayout>
  <!-- second row -->
  <LinearLayout
      android:orientation="horizontal"
      android:layout_width="fill_parent"
      android:layout_height="0dp"
      android:layout_weight="1">
    <!-- contents of the second row. -->
    <!-- etc -->
  </LinearLayout>
  <!-- third row -->
  <LinearLayout
      android:orientation="horizontal"
      android:layout_width="fill_parent"
      android:layout_height="0dp"
      android:layout_weight="1">
    <!-- contents of the third row -->
    <!-- etc -->
  </LinearLayout>
  <Button android:id="@+id/solveButton"
      android:layout_width="fill_parent"
      android:layout_width="wrap_content" />
  <Button android:id="@+id/clearButton"
      android:layout_width="fill_parent"
      android:layout_width="wrap_content" />
</LinearLayout>