Я сделал простое приложение, чтобы проиллюстрировать мою проблему. Краткое описание: Приложение содержит только одно действие. Это корневой вид TableLayout. Последний заполнен элементами TableRow, которые, в свою очередь, завышены от «row.xml». Вот код:RelativeLayout -> match_parent не такой же размер с родительским представлением
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>
Затем я запустить проект, открытый инструмент hierarchyViewer и осмотрите ширину строк таблицы и соответствующие относительные макеты - я вижу 320 и 0, соответственно. Почему они не одинаковы (320 и 320), если я объявляю «match_parent» в относительной компоновке? Я прикладываю 2 изображения, где вы можете наблюдать ширину элементов самостоятельно.
Я попытался изменить эту строку на "row = (TableRow) inflater.inflate (R.layout.row, table, false); ", но hierarchyviewer все еще показывал width = 0. Затем я попробовал строку «row = (TableRow) inflater.inflate (R.layout.row, table, true);» и получил ошибку "java.lang.ClassCastException: android.widget.TableLayout не может быть добавлен в android.widget.TableRow " –
Но каковы ваши TableLayout LauoutParams? Я не вижу, где вы их устанавливаете в своем коде. – Cata
Я сделал это по-другому: я удалил тег TableRow из файла XML и подключил RelativeLayout к строке в коде. Когда я это сделал, ширина строки была 320, относительная ширина макета была 317. Это почти нормально, но все еще странно. –