2012-04-23 2 views
0

Моя таблица заполнена динамическими данными, поэтому я добавляю TableRows и ее представления в код. TableLayout и первая строка (мой заголовок) встроены в xml. Гравитация, установленная в центре, работает над этими элементами. Но установка Gravity в центр моего динамически созданного TableRows и Views не работает.TextView Gravity не работает в TableLayout

<TableLayout 
    android:id="@+id/poweredEquip" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_centerVertical="true" 
    android:gravity="center" 
    android:padding="10dip">   
    <TableRow 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/tab_bg_unselected" 
     android:gravity="center"> 
     <TextView 
     android:text="Serial" 
     android:textSize="15sp" 
     android:textColor="@android:color/black" 
     android:layout_width="130px" 
     android:layout_height="wrap_content" 
     android:ellipsize="middle" 
     android:gravity="center" 
     android:layout_column="1"/> 
     <TextView 
     android:text="Model" 
     android:textSize="15sp" 
     android:textColor="@android:color/black" 
     android:layout_width="110px" 
     android:layout_height="wrap_content" 
     android:ellipsize="middle" 
     android:gravity="center" 
     android:layout_column="2"/> 
     <TextView 
     android:text="Status" 
     android:textSize="15sp" 
     android:textColor="@android:color/black" 
     android:layout_width="150px" 
     android:layout_height="wrap_content" 
     android:ellipsize="middle" 
     android:gravity="center" 
     android:layout_column="3"/> 
     <TextView 
     android:text="Tool Turned" 
     android:textSize="15sp" 
     android:textColor="@android:color/black" 
     android:layout_width="100px" 
     android:layout_height="wrap_content" 
     android:ellipsize="middle" 
     android:gravity="center" 
     android:layout_column="4"/> 
     <TextView 
     android:text="Hours" 
     android:textSize="15sp" 
     android:textColor="@android:color/black" 
     android:layout_width="110px" 
     android:layout_height="wrap_content" 
     android:ellipsize="middle" 
     android:gravity="center" 
     android:layout_column="5"/> 
     <TextView 
     android:text="Trailer Model" 
     android:textSize="15sp" 
     android:textColor="@android:color/black" 
     android:layout_width="110px" 
     android:layout_height="wrap_content" 
     android:ellipsize="middle" 
     android:gravity="center" 
     android:layout_column="6"/> 
    </TableRow> 
<TableLayout> 

Activity.cs

TableLayout powered = (TableLayout) FindViewById(Resource.Id.poweredEquip); 
TableRow.LayoutParams p = new TableRow.LayoutParams(ViewGroup.LayoutParams.FillParent, ViewGroup.LayoutParams.WrapContent) {Gravity = GravityFlags.Center}; 
TableRow.LayoutParams p1 = new TableRow.LayoutParams(ViewGroup.LayoutParams.FillParent, ViewGroup.LayoutParams.WrapContent) {Column = 1, Gravity = GravityFlags.Center}; 

TableRow row = new TableRow(this) { LayoutParameters = p }; 
text = new TextView(this) {Text = dr["Serial"].ToString(), LayoutParameters = p1}; 
text.SetPadding(8, 8, 8, 8); 
text.SetMaxWidth(150); 
text.SetMinWidth(150); 
row.AddView(text); 

powered.AddView(row); 
+0

это текст появляется? – JRaymond

+0

Да. Все работает, кроме выравнивания. – jmease

ответ

2
  1. Можете ли вы разместить свой XML-макет для текста (всего 1 или 2), которые работают?

  2. Удар в темноте, но вы можете попробовать установить LAYOUT_GRAVITY для параметров макета текста вместо GRAVITY, так как вы вынуждаете ширину быть равной 150. Указание Гравитации макета как CENTER должно заставить весь TEXTVIEW переместитесь в середину родительского контейнера (Table Row).

  3. Другая мысль: когда вы устанавливаете параметры макета для TextView, используется TableRow.LayoutParams. I думаю, что действительно может устанавливать параметры в отношении строки таблицы, не задавая параметры самого TextView. Попробуйте вызвать это на каждом TextView вы создаете, прежде чем добавлять его в строку таблицы:

    text.setGravity(Gravity.CENTER);

+0

Добавлены некоторые текстовые элементы в исходный код. Я не вижу Layout_Gravity как участника TableRow.LayoutParams. Что это будет? – jmease

+0

Кажется, что некорректный способ установки layout_gravity в текстовом виде в коде позади. Можете ли вы установить текстовое окно (в коде позади), чтобы иметь некоторый фон и задавать строки таблицы, чтобы иметь другой цветной фон, позволить ему запустить и сделать снимок экрана? Это даст нам представление о том, как установить метки (плотность, размер) в строках таблицы. – Gophermofur

+0

Я установил фон TextView оранжевым, и похоже, что TextView занимает всю ширину столбца независимо от длины текста. Текст всегда выравнивается слева. – jmease

0

Если вы хотите же свойство для ваших tablerows, то вы можете сделать это легко.

Просто используйте get layout из своего макета xml, а затем установите эти layoutparmas в свою динамическую таблицу строк.

xml_table_row = (TableRow) findviewbyid (R.id.xml_table_row_id) TableLayout.layoutparam param = xml_table_row.getLayoutParams();

powered.AddView (строка, параметр);

Надеюсь, это поможет вам. Если нет, ответьте, чтобы я мог попробовать.