Когда я создаю строки на вкладке «Студия дизайна Android», кнопка внутри строк не кажется правильно выровненной, когда я создал их через XML. Почему кнопка ButtonRow правильно выравнивается при создании с помощью XML, но она правильно выровнена при создании программно?
Однако, когда я программно добавить их с помощью инфляции, они получают выровнены (обратите внимание, что последняя строка с именем ключа была скопирована и вставлена непосредственно в XML, так что я могу проверить, если есть что-то не так с моим столом настройки):
Вот файл 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);
}
});
}
}
удалить андроид: layout_marginEnd = "5pt" и снова проверить его. – Radhey
@Redhey, который работал, но у меня есть маржа, установленная и в XML-файле TableRow, и это не кажется проблемой при создании программно. Это действительно странно:/ – Kiril
Это потому, что вы передаете null в качестве родительского параметра ViewGroup для inflate(). Это приведет к игнорированию всех атрибутов layout_ *, поскольку надуватель не имеет представления о том, какие атрибуты действительны для контейнера, в котором он будет размещен (т. Е. Он не имеет представления о том, какой тип LayoutParams устанавливается для представления). – Radhey