2016-10-27 3 views
1

Когда я создаю строки на вкладке «Студия дизайна Android», кнопка внутри строк не кажется правильно выровненной, когда я создал их через XML. Studio DesignerПочему кнопка ButtonRow правильно выравнивается при создании с помощью XML, но она правильно выровнена при создании программно?

Однако, когда я программно добавить их с помощью инфляции, они получают выровнены (обратите внимание, что последняя строка с именем ключа была скопирована и вставлена ​​непосредственно в XML, так что я могу проверить, если есть что-то не так с моим столом настройки):

enter image description here

Вот файл XML для строки:

<?xml version="1.0" encoding="utf-8"?> 
<TableRow xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/active_key_row" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_marginBottom="5pt" 
    android:layout_marginEnd="5pt" 
    android:visibility="visible"> 

    <TextView 
     android:id="@+id/active_key_name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="Key Name" /> 

    <Button 
     android:id="@+id/active_key_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/remove_key" /> 
</TableRow> 

Вот XML для таблицы:

<TableLayout 
    android:id="@+id/bt_keys_table" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <TableRow xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/active_key_row" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_marginBottom="5pt" 
     android:layout_marginEnd="5pt" 
     android:visibility="visible"> 

     <TextView 
      android:id="@+id/active_key_name" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="Key Name" /> 

     <Button 
      android:id="@+id/active_key_button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/remove_key" /> 
    </TableRow> 

    <TableRow 
     android:id="@+id/empty_key_row" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_marginBottom="5pt" 
     android:layout_marginEnd="5pt" 
     android:visibility="visible"> 


     <TextView 
      android:id="@+id/empty_text_view" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="" /> 

     <Button 
      android:id="@+id/add_key_button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:enabled="false" 
      android:text="@string/add_key" /> 
    </TableRow> 

</TableLayout> 

Вот код Java для инфляции:

private void buildBtKeysTable() { 

    mBtKeysTable = (TableLayout) findViewById(R.id.bt_keys_table); 

    // Add the rows to the table 
    for (int i = 0; i < DEFAULT_MAX_KEYS; i++) { 
     // Inflate the row 
     final TableRow row = (TableRow) 
       getLayoutInflater().inflate(R.layout.active_keys_table_row, null); 

     mBtKeysTable.addView(row, 0); 

     Button button = (Button) row.findViewById(R.id.active_key_button); 

     // Subscribe to the active buttons for bluetooth 
     button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View arg0) { 
       removeBluetoothKey(row); 
      } 
     }); 
    } 
} 
+0

удалить андроид: layout_marginEnd = "5pt" и снова проверить его. – Radhey

+0

@Redhey, который работал, но у меня есть маржа, установленная и в XML-файле TableRow, и это не кажется проблемой при создании программно. Это действительно странно:/ – Kiril

+1

Это потому, что вы передаете null в качестве родительского параметра ViewGroup для inflate(). Это приведет к игнорированию всех атрибутов layout_ *, поскольку надуватель не имеет представления о том, какие атрибуты действительны для контейнера, в котором он будет размещен (т. Е. Он не имеет представления о том, какой тип LayoutParams устанавливается для представления). – Radhey

ответ

1

Сэр, это потому, что вы передаете null в качестве родительского параметра ViewGroup для раздувания(). Это приведет к игнорированию всех атрибутов layout_ *, поскольку надуватель не имеет представления о том, какие атрибуты действительны для контейнера, в котором он будет размещен (т. Е. Он не имеет представления о том, какой тип LayoutParams устанавливается для представления).

пусть мы рассмотрим подробнее ..

попробовать заменить этот

getLayoutInflater().inflate(R.layout.active_keys_table_row, null); 
          with   
getLayoutInflater().inflate(R.layout.active_keys_table_row, item, false); 

и выяснить, что происходит.

0

Добавить атрибут веса к кнопке также. если не удалять вес из текста и кнопки и пытаться добавить гравитацию вправо для кнопки.