微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 TableRow 和广告扩展到现有表格

如何解决将 TableRow 和广告扩展到现有表格

我想向 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" />

但是这不起作用,因为编译器无法编译它(没有错误只是说编译失败)。我在 LinearLayout 周围添加TableRow,但这没有帮助。

我可以用这种方式定义 TableRow 还是最好转换为 Grid

解决方法

我想向 TableLayout 添加动态行数。

在TableLayout中动态添加TableRow,可以看看:

<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);

            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);
            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();
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。