当前位置: 首页 > 知识库问答 >
问题:

使用多个视图以编程方式/动态方式创建LinearLayout

越雨泽
2023-03-14

我有一个这样的层次结构:

  • 线性布局(水平)
    • 图像视图
    • 线性布局(垂直)
      • 文本视图
      • 文本视图
      • 文本视图
      • 文本视图

      我希望能够通过迭代添加上面的层次结构,只要可以从数据库中获得数据(使用Parse)

      我尝试过将ImageView和LinearLayout放在父LinearLayout下,但似乎不起作用。这是我在Mainactive中的代码。Java:

      LinearLayout LL_Outer = (LinearLayout) findViewById(R.id.new_linearLayoutOuter);
      LL_Outer.setOrientation(LinearLayout.VERTICAL); // set orientation
      LL_Outer.setBackgroundColor(color.white); // set background
      // set Layout_Width and Layout_Height
      LinearLayout.LayoutParams layoutForOuter = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
      LL_Outer.setLayoutParams(layoutForOuter);
      
      
      LinearLayout LL_Inner = (LinearLayout) findViewById(R.id.new_linearLayoutInner);
      LL_Inner.setOrientation(LinearLayout.HORIZONTAL);
      LL_Inner.setBackgroundColor(color.white);
      LinearLayout.LayoutParams layoutForInner = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
      LL_Inner.setLayoutParams(layoutForInner);
      
      //LL_Outer.addView(LL_Inner);
      
      ImageView IV = (ImageView) findViewById(R.id.new_imageViewPP);
      //IV.getLayoutParams().height = 55;
      //IV.getLayoutParams().width = 55;
      LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
      params.setMargins(14, 12, 0, 0);
      params.height = 55;
      params.weight = 55;
      IV.setBackgroundColor(color.black);
      IV.setLayoutParams(params);
      
      LL_Inner.addView(IV);
      LL_Outer.addView(LL_Inner);
      

      我不知道哪里出错了,因为我的代码没有提示任何错误。请帮忙。

      编辑:我已经相应地编辑了方向,当我运行应用程序时,它停止工作。并在LogCat中提示一个错误,表示“指定的子级已具有父级。必须首先对子级的父级调用removeView()。

      以下是我的XML:

      <LinearLayout
          android:id="@+id/new_linearLayoutOuter"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:background="@color/white"
          android:orientation="horizontal" >
      
          <ImageView
                  android:id="@+id/new_imageViewPP"
                  android:layout_width="55dp"
                  android:layout_height="55dp"
                  android:layout_marginLeft="14dp"
                  android:layout_marginTop="12dp"
                  android:background="@color/black"
                  android:contentDescription="@string/pp" />
      
          <LinearLayout
              android:id="@+id/new_linearLayoutInner"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:background="@color/white"
              android:orientation="vertical" >
      
              <TextView 
                  android:id="@+id/new_textView"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="@string/movie_title"
                  android:paddingTop="10dp"
                  android:paddingLeft="7dp"
                  android:textSize="15sp" /> <!-- Title of the movie -->
      
              <TextView 
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="@string/review_by"
                  android:paddingTop="3dp"
                  android:paddingLeft="7dp"
                  android:textSize="12sp" /> <!-- By -->
      
              <TextView 
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="@string/movie_stars"
                  android:paddingTop="3dp"
                  android:paddingLeft="7dp"
                  android:textSize="12sp" /> <!-- Rating and date -->
      
              <TextView 
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="@string/sample_string"
                  android:maxLines="5"
                  android:scrollbars="vertical"
                  android:paddingTop="10dp"
                  android:paddingLeft="7dp"
                  android:textSize="12sp"
                  android:layout_gravity="center_vertical|right" /> <!-- Review content -->
      
      
          </LinearLayout>
      
      </LinearLayout>
      

共有3个答案

年良骏
2023-03-14

在XML文件中,LinearLayout已经具有子视图。因此,不需要在代码中添加它们。

郎宏逸
2023-03-14

问题是因为视图已经添加到XML文件中的布局中。然后您findViewById(找到它们)并尝试再次将它们添加到布局中。这就是为什么应用程序崩溃抱怨,视图已经有父级,您无法再次添加它。

鲁财
2023-03-14

您希望以编程方式实现该层次结构。

<代码>-线性布局(水平)-图像视图-线性布局(垂直)-文本视图-文本视图-文本视图-文本视图-文本视图

确定让我们从父级开始

LinearLayout parent = new LinearLayout(context);

parent.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
parent.setOrientation(LinearLayout.HORIZONTAL);

//children of parent linearlayout

ImageView iv = new ImageView(context);

LinearLayout layout2 = new LinearLayout(context);

layout2.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
layout2.setOrientation(LinearLayout.VERTICAL);

parent.addView(iv);
parent.addView(layout2);

//children of layout2 LinearLayout

TextView tv1 = new TextView(context);
TextView tv2 = new TextView(context);
TextView tv3 = new TextView(context);
TextView tv4 = new TextView(context);

layout2.addView(tv1);
layout2.addView(tv2);
layout2.addView(tv3);
layout2.addView(tv4);

你完成了:)

 类似资料:
  • 问题内容: 我正在尝试以编程方式创建UIImage视图,我有一个新视图,并且尝试这样做 这行不通,因为我不知道 您 在第二行中应该看到的是什么。 问题: 如何通过编码而不是在情节提要中使UIImageView出现在屏幕上 问题答案: 首先,您从图片文件中创建一个,然后从中创建一个: 最后,您需要给出一个框架并将其添加到视图中以使其可见:

  • 问题内容: 是否有免费的库可根据图像序列创建MPEG(或任何其他简单的视频格式)? 它也必须在Linux上运行,并且最好具有Python绑定。 问题答案: 我知道有一个mencoder(是mplayer项目的一部分)和ffmpeg,它们都可以做到这一点。

  • 我想通过编程(从关联菜单)打开某个视图,我该怎么做? 我可以使用e3兼容层显示如下视图: e4的方法是什么?

  • 问题内容: 我正在尝试根据从表单接收的输入来构建搜索。 我想根据这些值建立一个查询,但是如果该字段没有值,我显然不想在搜索中包括它(搜索“”会改变结果) 我尝试了几种不同的方法,例如构建一个字符串以放置在其中: 但这似乎无法正常工作。我也尝试过像这样的“堆叠”搜索查询: 然后像这样执行搜索: 但这会导致500个错误(而且我不确定是否可以从中获取更多信息)。 请帮助新手动态建立猫鼬搜索查询:( 问题

  • 问题内容: 我一直在尝试以编程方式重做我的应用程序上的工作。(不使用情节提要) 除了手动制作导航控制器外,我几乎完成了。 我一直在做一些研究,但找不到任何手动实现此方法的文档。(我开始将应用程序制作为单视图应用程序) 目前,我只有1个ViewController。当然是appDelegate 导航控制器将在应用程序的所有页面中使用。 如果有人可以帮助我,或发送指向一些适当文档的链接以编程方式进行此

  • 如何以编程方式设置属性?