#android #xamarin #xamarin.android #tablerow
#Android #xamarin #xamarin.android #tablerow
Вопрос:
Я хочу добавить динамическое количество строк в a TableLayout
. Мой исходный код определил таблицу в .axml
файле и все 32 строки. Сами строки были довольно сложными, ImageView
а затем еще один встроенный макет таблицы.
Затем меня попросили добавить в таблицу еще 10 строк, и я подумал, что должен быть лучший способ, а не 42 одинаково расположенных строки таблицы .axml
, и посмотрел на то, чтобы сделать ее более управляемой данными, чтобы я мог расширить таблицу позже, если это необходимо.
Моей первоначальной мыслью было создать .axml
файл только с TableRow
определением, а затем в цикле кода перебирать мои данные и раздувать строку из .axml
и добавлять в представление. Похоже, моя проблема связана с самим .axml
файлом. Начало моего файла
<?xml version="1.0" encoding="utf-8"?>
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp">
<ImageView
android:id="@ id/ivSign"
android:src="@drawable/sign_menatwork"
android:layout_column="0"
android:layout_width="wrap_content"
android:layout_height="72dp"
android:contentDescription="Men at Work" />
Однако это не работает, поскольку компилятору не удается его скомпилировать (ошибка не указывает, что не удалось скомпилировать). Я добавил a LinearLayout
вокруг TableRow
, но это не помогло.
Могу ли я определить TableRow
таким образом, или мне лучше всего преобразовать в a Grid
?
Ответ №1:
Я хочу добавить динамическое количество строк в табличное описание.
Добавляя TableRow в TableLayout динамически, вы можете взглянуть:
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@ id/tableLayout1"
android:stretchColumns="*">
</TableLayout>
TableLayout tablelayout1;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.activity_main);
tablelayout1 = FindViewById<TableLayout>(Resource.Id.tableLayout1);
tablerow();
}
void tablerow()
{
for(int i=0;i<10;i )
{
TableLayout.LayoutParams layoutParams = new TableLayout.LayoutParams(LayoutParams.MatchParent, LayoutParams.WrapContent);
TableRow.LayoutParams layoutParams2 = new TableRow.LayoutParams(LayoutParams.MatchParent, LayoutParams.WrapContent);
TextView date = new TextView(this);
//Use TableRow
date.LayoutParameters = layoutParams2;
date.SetBackgroundColor(Color.ParseColor("#FFFFC0"));
date.SetTextSize(Android.Util.ComplexUnitType.Px, (float)30.0);
date.SetTextColor(Color.Black);
date.Text = "date";
date.SetPadding(5, 5, 5, 5);
TextView name = new TextView(this);
//Use TableRow
name.LayoutParameters = layoutParams2;
name.SetBackgroundColor(Color.ParseColor("#FFFFC0"));
name.SetTextColor(Color.Black);
name.SetTextSize(Android.Util.ComplexUnitType.Px, (float)30.0);
name.Text = "title";
name.SetPadding(5, 5, 5, 5);
TableRow tr = new TableRow(this);
//Use TableLayout
tr.LayoutParameters = layoutParams;
tr.AddView(date);
tr.AddView(name);
tablelayout1.AddView(tr, i);
}
}
Обновить:
Сначала создайте новую layout.xml , просто только TableRow.
<?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="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="1"
android:text="Open..."
android:padding="3dip"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Ctrl-O"
android:gravity="right"
android:padding="3dip"/>
</TableRow>
Затем раздуть TableRow.
void tablerow()
{
LayoutInflater layoutInflater = (LayoutInflater)GetSystemService(LayoutInflaterService);
TableRow tableRow = (TableRow)layoutInflater.Inflate(Resource.Layout.layout1, null);
tablelayout1.AddView(tableRow);
}
TableLayout tablelayout1;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.activity_main);
tablelayout1 = FindViewById<TableLayout>(Resource.Id.tableLayout1);
tablerow();
}
Комментарии:
1. Спасибо — у меня уже есть что-то очень похожее, но поскольку мой TableRow сам по себе имеет довольно сложную структуру, я хотел определить TableRow в файле .axml, а затем раздуть .axml для каждой строки и добавить в таблицу. Кажется, что вы не можете определить один TableRow в файле .axml, а затем раздуть его как представление — .axml выдает ошибки, как указано выше
2. @user1169502 Вы имеете в виду, что вы просто хотите добавить TableRow в XML-файл, никаких других элементов управления, а затем добавить этот XML-файл в TableLayout с помощью кода?
3. Точно — я не знаю, сколько строк таблицы мне нужно, но формат строки таблицы одинаков для всех строк, но довольно сложный. Просто имеет смысл иметь TableRow в файле .axml, а затем раздувать каждую строку перед добавлением в таблицу.
4. @user1169502 Я нахожу один способ сделать это, пожалуйста, взгляните на мое обновление.