2014-04-25 23 views
0

我正试图建立一个国际象棋应用程序,但我无法让电路板正常工作。我已经尝试了一切,以使表行高度与列宽相匹配,这样广场看起来是正方形的,但在不同的屏幕上,它们会出现挤压或拉伸。TableRows高度不会出来

这里是我的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只是在弥补它想要的任何价值。我如何强制这些行成为正确的高度?

+0

我怀疑大多数国际象棋应用程序首先不会使用“TableLayout”,而是使用2D Canvas图形API并简单地绘制所需的电路板。 – CommonsWare

+0

我应该从别的东西开始,但我已经走到了这么远,我担心重新开始为时已晚。一切正常,并准备好去除这个问题!那么,我怎样才能强制这些行成为一个给定的高度,每一次都不会失败?我有错误的参数或什么? – user3571043

回答

0

在XML设置:

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

为什么不:

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

(另外,你为什么指定layout_weight这不应该在那里?)

+0

您正在阅读该行的孩子。他们填写他们的父母,行。我需要改变行高,孩子们会和他们一起成长。该行设置为扭曲内容,但是它们随后以LayoutParams编程方式更改。重量是这样他们将平均填充屏幕的宽度。否则,他们会聚集在屏幕的左侧。 – user3571043

+0

然后我不明白你想要画什么。屏幕不是方形的。您是否尽可能让电路板充满屏幕? –

+0

在您的代码中,为什么不:LayoutParams params = new LayoutParams(squareWidth,squareWidth); –