使用多个视图以编程方式/动态方式创建 LinearLayout [英] Creating LinearLayout Programmatically/Dynamically with Multiple Views

查看:37
本文介绍了使用多个视图以编程方式/动态方式创建 LinearLayout的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a hierarchy that is like this:

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

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

      I want to be able to add the hierarchy above through iteration as long as there is data that could be obtained from the database(using Parse)

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

      I have tried putting up the ImageView and LinearLayout under the parent LinearLayout but it doesn't seem to work. Here is my code in MainActivity.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);
      

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

      I don't know where I went wrong as my code did not prompt any error. Please help.

      我已经相应地编辑了方向,当我运行应用程序时,它停止工作.并在LogCat中提示错误指定的孩子已经有父母.您必须先在孩子的父母上调用removeView().

      I have edited the Orientations accordingly and when I run the app, it stops working. And prompts an error in LogCat saying "The specified child already has a parent. You must call removeView() on the child's parent first.

      这是我的 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>
      

      推荐答案

      您希望以编程方式建立层次结构.

      You want that hierarchy programmatically.

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

      好的,让我们从父 LinearLayout

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

      你完成了:)

      这篇关于使用多个视图以编程方式/动态方式创建 LinearLayout的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆