【问题标题】:TableRows height won't come out rightTableRows 高度不会正确显示
【发布时间】: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


【解决方案1】:

在您设置的 XML 中:

 android:layout_height="fill_parent" android:layout_width="35dp"

为什么不:

 android:layout_height="35dp" android:layout_width="35dp"

(另外,为什么要指定 layout_weight?那不应该存在。)

【讨论】:

  • 您正在为该行的孩子阅读。他们填写他们的父母,行。我需要改变行高,孩子们会和他们一起成长。该行设置为扭曲内容,但无论如何它们都会以编程方式使用 LayoutParams 进行更改。重量使它们均匀地填充屏幕的宽度。否则,它们只会聚集在屏幕的左侧。
  • 那我不明白你要画什么。屏幕不是方形的。您是否试图让板子尽可能地填满屏幕?
  • 在您的代码中,为什么不这样做:LayoutParams params = new LayoutParams(squareWidth, squareWidth);
  • 我试图让板子是方形的,而不是屏幕。我希望它测量屏幕宽度,然后将板高度设置为相同的测量值。我的问题是,即使我得到了正确的 squareWidth 值(它打印正确),也没有为行分配该高度。我的 LayoutParams 一定有问题。
  • 对 LayoutParams 的高度和宽度使用相同的宽度,正如我所指出的。
猜你喜欢
  • 1970-01-01
  • 2021-04-15
  • 2013-10-05
  • 2014-10-31
  • 1970-01-01
  • 1970-01-01
  • 2013-08-11
  • 1970-01-01
  • 2015-09-17
相关资源
最近更新 更多