java - android:调用 Button.setText() 会导致 Button 发生意外的重新定位

标签 java android button view tablelayout

我遇到这个问题,每当我调用 Button.setText 时,ButtonTableLayout 就会重新定位所有 Button 对象(字符串)。我没有给出任何指示 View 应该被移动......而且我真的不希望它这样做。如果有人知道如何防止这些Views移动(如果可能的话,不会有太多麻烦),请告诉我。

我正在使用一些非正统的方法来获取屏幕设置。这是代码:

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() 覆盖中代码的底部。这是图像中的不良行为。当我调用 setText() 时,按钮仅获得延迟的 y 偏移量。如果我调用 setText("") [空字符串] 按钮的位置不会改变。什么给出?

最佳答案

事实证明这是 TableLayouts 的一个已知问题。早在 2010 年初,这个问题就被报告过多次。您可以在此处找到错误报告:

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

如果您有任何需要添加的内容,或者遇到相关问题,请发布错误报告。

修复:为了解决这个问题,我最终在填写网格时用换行符填充了空白按钮。这样一切就都抵消了。漂亮、整洁、均匀。

关于java - android:调用 Button.setText() 会导致 Button 发生意外的重新定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5914855/

相关文章:

C++/Win32 API - 将焦点设置为按钮不起作用

java - 检查按钮是否存在 Jsoup

java - 如何在 Android 中替换 JSON 字符串中的 HTML 转义字符

java - Android 聊天机器人 Gui 与 Program Ab AIML 解释器的链接

Android(x,y)连续触摸(拖动)坐标

c# - 按键触摸和屏幕触摸的区别

java - JVM——新生代和老年代的比例/分配

java - Java徒手绘图,添加绘图到JPanel

java - 无法从 Handler 类型对非静态方法 sendEmptyMessage(int) 进行静态引用

C# 将焦点放在按钮上/使其处于事件状态