2011-05-06 39 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,並且如果文本不太適合按鈕,則佈局不應該移位。