【发布时间】:2014-04-25 09:35:09
【问题描述】:
我正在尝试构建一个国际象棋应用程序,但我无法让棋盘正常工作。我已尽一切努力使表格行高与列宽匹配,使方块看起来是方形的,但在不同的屏幕上,它们会被压扁或拉伸。
这是我的 XML 代码:
<TableLayout
android:id="@+id/chessboard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/background" >
<!-- LINE 8 -->
<TableRow
android:id="@+id/line_8"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="30dp" >
<!-- NOTATION LINE 8 LEFT -->
<TextView
android:id="@+id/notation_8_left"
android:layout_width="35dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:gravity="center|right"
android:paddingRight="3dp"
android:text="8"
android:textColor="#FEFEFE" />
<!-- CELLS -->
<ImageButton
android:id="@+id/a8"
android:background="#fe9"
android:onClick="moveClickHandler" android:layout_weight="1" android:layout_height="fill_parent" android:layout_width="35dp"
android:scaleType="fitXY"
android:src="@drawable/brook"
android:tag="br" />
<ImageButton
android:id="@+id/b8"
android:layout_width="35dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="#fb3"
android:onClick="moveClickHandler"
android:scaleType="fitXY"
android:src="@drawable/bknight"
android:tag="bn" />
<ImageButton
android:id="@+id/c8"
android:background="#fe9"
android:onClick="moveClickHandler" android:layout_weight="1" android:layout_height="fill_parent" android:layout_width="35dp"
android:scaleType="fitXY"
android:src="@drawable/bbishop"
android:tag="bb" />
<ImageButton
android:id="@+id/d8"
android:background="#fb3"
android:onClick="moveClickHandler" android:layout_weight="1" android:layout_height="fill_parent" android:layout_width="35dp"
android:scaleType="fitXY"
android:src="@drawable/bqueen"
android:tag="bq" />
...
</TableRow>
这是我读取屏幕宽度并相应设置行高的编程尝试:
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
squareWidth = size.x / 10;
LayoutParams params = new LayoutParams(TableRow.LayoutParams.MATCH_PARENT, squareWidth);
TableRow rank8 = (TableRow) findViewById(R.id.line_8);rank8.setLayoutParams(params);
TableRow rank7 = (TableRow) findViewById(R.id.line_7);rank7.setLayoutParams(params);
TableRow rank6 = (TableRow) findViewById(R.id.line_6);rank6.setLayoutParams(params);
TableRow rank5 = (TableRow) findViewById(R.id.line_5);rank5.setLayoutParams(params);
TableRow rank4 = (TableRow) findViewById(R.id.line_4);rank4.setLayoutParams(params);
TableRow rank3 = (TableRow) findViewById(R.id.line_3);rank3.setLayoutParams(params);
TableRow rank2 = (TableRow) findViewById(R.id.line_2);rank2.setLayoutParams(params);
TableRow rank1 = (TableRow) findViewById(R.id.line_1);rank1.setLayoutParams(params);
当我输出高度和“squareWidth”的值时,我得到“squareWidth 为 160”但“行高为 90”或“squareWidth 为 35,行高为 68”。所以感觉就像Android只是在弥补它想要的任何价值。我怎样才能强制行是正确的高度?!
【问题讨论】:
-
我怀疑大多数国际象棋应用一开始不会使用
TableLayout,而是使用 2D Canvas 图形 API 并简单地绘制所需的棋盘。 -
我应该从别的开始,但我已经走了这么远,我担心重新开始为时已晚。一切正常,并准备好去除了这个问题!那么我怎样才能每次都强制将行设置为给定的高度呢?是不是我的参数有误?
标签: android tablelayout tablerow