Вопрос:

LayoutInflater игнорирует параметры?

android

3062 просмотра

3 ответа

2979 Репутация автора

У меня есть следующий объект XML, представляющий ImageButton

<?xml version="1.0" encoding="utf-8"?>
<ImageButton
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/genreCellItemId" android:layout_weight="1"
  android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center"
  android:paddingLeft="5.0dip" android:paddingRight="5.0dip">
</ImageButton>

Я пытаюсь надуть его и добавить в TableRow с помощью следующего кода:

LayoutInflater inflater= this.getLayoutInflater();
TableLayout grid = (TableLayout)findViewById(R.id.bodyTableLayout);
TableRow row = (TableRow)inflater.inflate(R.layout.genre_row, null);
View myButton = (View)inflater.inflate(R.layout.genre_cell, null);
row.addView(tempButton, new TableRow.LayoutParams());
grid.addView(row, new TableLayout.LayoutParams());

Итак, я заметил, что это не выглядело так, как ожидалось, поэтому я запустил средство просмотра иерархии и заметил, что у ImageButton фактически есть layout_width = FILL_PARENT вместо WRAP_CONTENT, также layout_gravity равен NONE, и там нет видимых полей .. ,

Неужели я неправильно раздуваю это? Или, может быть, новая часть TableRow.LayoutParams () делает что-то не так?

Автор: TiGer Источник Размещён: 29.04.2010 03:41

Ответы (3)


16 плюса

793723 Репутация автора

Попробуйте использовать inflate(R.layout.genre_cell, row, false)вместо inflate(R.layout.genre_cell, null)и посмотреть, поможет ли это. Иногда инфляция работает лучше, когда она знает, к какому родителю будет относиться раздутая точка зрения.

Автор: CommonsWare Размещён: 29.04.2010 05:44

2 плюса

2979 Репутация автора

Решение

Спустя почти два дня я нашел виновника:

Как я на самом деле подозревал, что новый LayoutParams () является проблемой, если вы уже «отформатировали» свой View в объявлении XML ... Так что после выхода из нового LayoutParams () из уравнения моя таблица будет отображаться очень хорошо ...

Так что просто используйте:

grid.addView(row);
Автор: TiGer Размещён: 04.05.2010 10:45

0 плюса

109 Репутация автора

Для тех, кто использует Data Binding x Kotlin и сталкивается с этой проблемой:

вместо :

val binding = YourBindingClass.inflate(LayoutInflater.from(parent.context))
return ViewHolder(binding)

использовать этот:

val binding = YourBindingClass.inflate(LayoutInflater.from(parent.context), parent, false)
return ViewHolder(binding)
Автор: Siddharth Jaswal Размещён: 13.06.2019 06:32
Вопросы из категории :
32x32