Android: вызов Button.setText () вызывает нежелательное перемещение кнопки - PullRequest
0 голосов
/ 06 мая 2011

У меня возникает проблема, когда TableLayout из Button s перемещает все Button объекты всякий раз, когда я вызываю Button.setText(String).я не дал никаких указаний на то, что 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() переопределить.вот нежелательное поведение в изображении.Button s ТОЛЬКО получают это запаздывающее смещение y, когда я вызываю setText ().если я вызываю setText ("") [empty String], расположение кнопки не меняется.что дает?

image

Ответы [ 2 ]

1 голос
/ 06 мая 2011

оказывается, что это известная проблема с TableLayouts.об этом сообщалось несколько раз, начиная с начала 2010 года. отчет об ошибке можно найти здесь:

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

, если вам есть что добавить, или у вас есть связанная проблемаПожалуйста, опубликуйте отчет об ошибке.

FIX : чтобы исправить проблему, я заполнил пустые кнопки новыми строками, когда заполнил сетку.таким образом, все было компенсировано вместе.красиво, аккуратно, даже.

0 голосов
/ 06 мая 2011

Попробуйте изменить текст, который вы пишете в кнопку, я подозреваю, что кнопки слишком малы для объема текста, который вы вставляете, если setText ("") не меняет макет.

Кроме того, в вашей первой таблице уберите android: layout_height = "fill_parent".

Эта строка будет пытаться заставить эту строку заполнить всю таблицу, изменить ее на wrap_content, и если текст не слишком большой, чтобы поместиться в кнопке, компоновка не должна смещаться.

...