2011-05-06 27 views
0

我遇到此问题,其中TableLayoutButton s正在重新部署所有Button对象,只要我拨打Button.setText(String)即可。我没有给出任何迹象表明View应该被移动......而我真的不希望它。如果有人知道如何防止这些Views移动(如果可能,没有很多麻烦),请让我知道。android:调用Button.setText()导致Button不受欢迎的重定位

我使用一些非传统的方法来获取屏幕设置。下面的代码:

static_grid_layout.xml:

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_height="fill_parent" 
     android:layout_width="fill_parent" 
     android:stretchColumns="*" 
     android:gravity="center"> 
    <TableRow android:layout_height="fill_parent" 
      android:layout_width="fill_parent"> 
     <Button android:id="@+id/btn1" 
      android:layout_width="100dip" 
      android:layout_height="80dip" 
      android:gravity="center" 
      android:ellipsize="marquee"/> 
     <Button android:id="@+id/btn2" 
      android:layout_width="100dip" 
      android:layout_height="80dip" 
      android:gravity="center" 
      android:ellipsize="marquee"/> 
     <Button android:id="@+id/btn3" 
      android:layout_width="100dip" 
      android:layout_height="80dip" 
      android:gravity="center" 
      android:ellipsize="marquee"/> 
    </TableRow> 
    <TableRow> 
     <Button android:id="@+id/btn4" 
      android:layout_width="100dip" 
      android:layout_height="80dip" 
      android:gravity="center" 
      android:ellipsize="marquee"/> 
     <Button android:id="@+id/btn5" 
      android:layout_width="100dip" 
      android:layout_height="80dip" 
      android:gravity="center" 
      android:ellipsize="marquee"/> 
     <Button android:id="@+id/btn6" 
      android:layout_width="100dip" 
      android:layout_height="80dip" 
      android:gravity="center" 
      android:ellipsize="marquee"/> 
    </TableRow> 
    <TableRow> 
     <Button android:id="@+id/btn7" 
      android:layout_width="100dip" 
      android:layout_height="80dip" 
      android:gravity="center" 
      android:ellipsize="marquee"/> 
     <Button android:id="@+id/btn8" 
      android:layout_width="100dip" 
      android:layout_height="80dip" 
      android:gravity="center" 
      android:ellipsize="marquee"/> 
     <Button android:id="@+id/btn9" 
      android:layout_width="100dip" 
      android:layout_height="80dip" 
      android:gravity="center" 
      android:ellipsize="marquee"/> 
    </TableRow> 
    <TableRow> 
     <Button android:id="@+id/btn10" 
      android:layout_width="100dip" 
      android:layout_height="80dip" 
      android:gravity="center" 
      android:ellipsize="marquee"/> 
     <Button android:id="@+id/btn11" 
      android:layout_width="100dip" 
      android:layout_height="80dip" 
      android:gravity="center" 
      android:ellipsize="marquee"/> 
     <Button android:id="@+id/btn12" 
      android:layout_width="100dip" 
      android:layout_height="80dip" 
      android:gravity="center" 
      android:ellipsize="marquee"/> 
    </TableRow> 
    <TableRow> 
     <Button android:id="@+id/btn13" 
      android:layout_width="100dip" 
      android:layout_height="80dip" 
      android:gravity="center" 
      android:ellipsize="marquee"/> 
     <Button android:id="@+id/btn14" 
      android:layout_width="100dip" 
      android:layout_height="80dip" 
      android:gravity="center" 
      android:ellipsize="marquee"/> 
     <Button android:id="@+id/btn15" 
      android:layout_width="100dip" 
      android:layout_height="80dip" 
      android:gravity="center" 
      android:ellipsize="marquee"/> 
    </TableRow> 
    <TableRow> 
     <Button android:id="@+id/btn16" 
      android:layout_width="100dip" 
      android:layout_height="80dip" 
      android:gravity="center" 
      android:ellipsize="marquee"/> 
     <Button android:id="@+id/btn17" 
      android:layout_width="100dip" 
      android:layout_height="80dip" 
      android:gravity="center" 
      android:ellipsize="marquee"/> 
     <Button android:id="@+id/btn18" 
      android:layout_width="100dip" 
      android:layout_height="80dip" 
      android:gravity="center" 
      android:ellipsize="marquee"/> 
    </TableRow> 
    <TableRow> 
     <Button android:id="@+id/btn19" 
      android:layout_width="100dip" 
      android:layout_height="80dip" 
      android:gravity="center" 
      android:ellipsize="marquee"/> 
     <Button android:id="@+id/btn20" 
      android:layout_width="100dip" 
      android:layout_height="80dip" 
      android:gravity="center" 
      android:ellipsize="marquee"/> 
     <Button android:id="@+id/btn21" 
      android:layout_width="100dip" 
      android:layout_height="80dip" 
      android:gravity="center" 
      android:ellipsize="marquee"/> 
    </TableRow> 
</TableLayout> 

MainActivity.java:特别令人感兴趣的部分将在这里:

query = "SELECT * FROM "+DbSchema.ProductSchema.TABLE_NAME+ 
     " ORDER BY "+DbSchema.ProductSchema.COLUMN_PRIORITY+" ASC"; 
updateList(listQuery(query)); 
fillPage(mPage); 
setContentView(mPage); 

onResume()重写代码的底部。这是图像中不需要的行为。 Button只有在我调用setText()时才会获得延迟y偏移。如果我调用setText(“”)[空字符串]按钮的位置不会改变。是什么赋予了?

+0

更新:y偏移似乎与按钮上的文本行数成正比。文字越多,它越向南移动。 – moonlightcheese 2011-05-06 17:29:54

回答

1

原来这是一个已知的问题TableLayouts。对此进行了报道几次,看着追溯到2010年初。你可以找到的bug报告在这里:

http://code.google.com/p/android/issues/detail?id=6428

,如果你有什么要补充的,或者你有一个相关的问题,请邮寄一份错误报告。

FIX:为了解决这个问题,我结束了用换行符填充空白按钮,当我填补了网格。这样一切都被抵消在一起。漂亮,整齐,甚至。

0

尝试更改正在写入按钮的文本,如果setText(“”)不更改布局,我怀疑按钮对于要插入的文本数量太小。

此外,在您的第一个表格中,删除android:layout_height =“fill_parent”。

该行将尝试使该行填充整个表格,将其更改为wrap_content,并且如果文本不太适合按钮,则布局不应该移位。