2016-05-05 2 views
0

У меня есть TableLayout, который содержит только одну строку и одну ячейку. Я хотел бы, чтобы содержимое моей ячейки было горизонтально по центру. Я попробовал два подхода:Android TableLayout и горизонтальная гравитация

Первый метод, я установил атрибут андроида: гравитация = «center_horizontal» на элементе TableRow и он работает, как ожидалось:

<?xml version="1.0" encoding="utf-8"?> 
    <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
     <TableRow android:gravity="center_horizontal"> 
      <Button 
       android:id="@+id/MyButton" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"    
       android:text="@string/Hello" /> 
     </TableRow> 
    </TableLayout> 

Второй метод, я установил атрибут андроид: layout_gravity = «center_horizontal» непосредственно на содержание клеток (кнопка здесь), но это не центры кнопку:

<?xml version="1.0" encoding="utf-8"?> 
     <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"> 
      <TableRow> 
       <Button 
        android:id="@+id/MyButton" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"    
        android:layout_gravity="center_horizontal" 
        android:text="@string/Hello" /> 
      </TableRow> 
     </TableLayout> 

Может кто-нибудь объяснить мне, почему второй подход не работает?

Спасибо

Риана

ответ

0

android:gravity относится к содержанию ребенка внутри вида. В вашем случае это влияет на СОДЕРЖАНИЕ ячейки таблицы.

android:layout_gravity относится к размещению вида в его родительском элементе. В этом случае размещение ячейки в таблице, но НЕ содержимое ячейки. Содержимое ячейки НЕ будет затронуто.

Смотрите этот же вопрос для некоторых других примеров и дальнейшего объяснения: Gravity and layout_gravity on Android

+0

Привет и спасибо за ваш ответ. В моих примерах я понимаю, почему работает первый подход. Непонятно, почему второй не удается. Атрибут layout_gravity, применяемый к кнопке, должен центрировать кнопку внутри родительского представления (TableRow) –

+0

Я не понимаю, как это не понятно. Гравитация - для дочернего содержимого ячейки таблицы. Layout_gravity предназначен для размещения самой ячейки таблицы в ее родительском элементе. Как объяснено в ответе. – joshgoldeneagle

+0

В моем примере Button является дочерним элементом TableRow. Когда я устанавливаю атрибут «тяжести» на TableRow, тогда он центрирует его содержимое, вот кнопка. Но когда я устанавливаю атрибут layout_gravity на Button, я ожидаю, что он также центрируется внутри своего контейнера, то есть TableRow. Я устанавливаю «тяжесть» на контейнере или установка «layout_gravity» на контент должно иметь такое же поведение. Надеюсь, я более ясен. –

Смежные вопросы