Почему эти взгляды не совпадают? - PullRequest
2 голосов
/ 04 ноября 2010

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

У меня есть макет, подобный следующему:

<TableLayout android:id="@+id/keyboard"
     android:layout_width="fill_parent"
     android:layout_height="378px">
    <TableRow android:layout_span="5" >
      <TextView android:id="@+id/button20"
          android:layout_width="63px"
          android:layout_height="42px"
          android:textSize="10"
          android:text="L1" />
      <TextView android:id="@+id/button21"
          android:layout_width="63px"
          android:layout_height="42px"
          android:textSize="12"
          android:text="L2" />
      <TextView android:id="@+id/button22"
          android:layout_width="63px"
          android:layout_height="42px"
          android:textSize="12"
          android:text="L3" />
      <TextView android:id="@+id/button23"
          android:layout_width="63px"
          android:layout_height="42px"
          android:textSize="12"
          android:text="L4" />
      <TextView android:id="@+id/button24"
          android:layout_width="63px"
          android:layout_height="42px"
          android:textSize="12"
          android:text="L5" />
    </TableRow>
</TableLayout>

Теперь,при рисовании первый TextView отображается на 2 пикселя ниже , чем все остальные.Переопределение метода onLayout;Я вижу, что onLayout вызывается для первого просмотра с помощью: top = 2;низ = 44;в то время как все остальные top = 0;bottom = 42.

Это происходит всякий раз, когда размер шрифта немного отличается от остальных;или если текст переносится на другую строку (потому что он не умещается в ширину).Все TextViews имеют одинаковые размеры;но некоторые отображаются немного ниже других.

Этот макет находится внутри RelativeLayout, если это имеет значение.

Я пробовал много разных комбинаций, и всегда есть некоторые расхождения.Любая помощь будет принята с благодарностью.

Спасибо!JY

1 Ответ

3 голосов
/ 05 ноября 2010

Похоже, текстовые представления выровнены по своим базовым линиям. Так что, если текст меньше, его базовый уровень будет выше внутри textview. Поэтому текстовое представление будет располагаться ниже, чтобы сопоставить базовую линию других текстовых представлений с более высоким текстом.

Чтобы предотвратить выравнивание базовой линии в строке, попробуйте изменить строку TableRow на:

<TableRow android:layout_span="5" android:baselineAligned="false" >

Недостатком является, конечно, то, что тексты могут больше не выглядеть выровненными.

...