RelativeLayout -> match_parent не совпадает с размером родительского представления - PullRequest
2 голосов
/ 17 января 2012

Я сделал простое приложение, чтобы проиллюстрировать мою проблему. Краткое объяснение: Приложение содержит только одно действие. Его корневым представлением является TableLayout. Последний заполнен элементами TableRow, которые, в свою очередь, надуваются из "row.xml". Вот код:

TestActivity.java

public class TestActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    LayoutInflater inflater=getLayoutInflater();
    TableLayout table=new TableLayout(this);
    setContentView(table);
    TableRow row; 
    for(int i=0;i<3;i++){
        row=(TableRow)inflater.inflate(R.layout.row, null, true);
        table.addView(row);
    }

  }
}

В row.xml TableRow является корневым элементом, у него есть дочерний элемент - RelativeLayout. Обратите внимание на свойство RelativeLayout android: layout_width = "match_parent". row.xml:

<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/background"
>

<RelativeLayout
    android:id="@+id/announcement_row_relative_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     >
</RelativeLayout>

Затем я запускаю проект, открываю инструментierarchyViewer и проверяю ширину строк таблицы и соответствующие относительные макеты - я вижу 320 и 0 соответственно. Почему они не одинаковы (320 и 320), если я объявил «match_parent» в относительной компоновке? Я прилагаю 2 изображения, где вы можете наблюдать ширину элементов самостоятельно.

TableRow width RelativeLayout width

Ответы [ 2 ]

1 голос
/ 17 января 2012

Ваша проблема здесь: row=(TableRow)inflater.inflate(R.layout.row, null, true);

Вы должны надуть свою строку следующим образом:

row=(TableRow)inflater.inflate(R.layout.row, table, false);

Таким образом LayoutParams будет загружено из вашего XML-файла.

1 голос
/ 17 января 2012

Это происходит потому, что ваш RelativeLayout не содержит дочерних элементов, а его метод onMeasure(..) не предоставил желаемой ширины.

...