Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何向Android XML布局文件动态添加布局和视图?_Java_Android_Xml - Fatal编程技术网

Java 如何向Android XML布局文件动态添加布局和视图?

Java 如何向Android XML布局文件动态添加布局和视图?,java,android,xml,Java,Android,Xml,我正在创建一个需要动态生成XML文件的应用程序。布局开始时基本上是空的(线性布局除外),然后我循环遍历一个JSON数组,并为数组中的每个元素创建如下所示的XML代码(数组中每个元素唯一不同的是视图的ID) 我并不真正理解如何使用Java创建这些布局、编辑它们的属性以及向它们添加视图 我知道我可以创建一个GridLayout对象,并使用 GridLayout doc = new GridLayout(3, 3); 但我不知道如何编辑所有特定属性,然后在布局中添加视图 通过Jave代码创建版面、编

我正在创建一个需要动态生成XML文件的应用程序。布局开始时基本上是空的(线性布局除外),然后我循环遍历一个JSON数组,并为数组中的每个元素创建如下所示的XML代码(数组中每个元素唯一不同的是视图的ID)

我并不真正理解如何使用Java创建这些布局、编辑它们的属性以及向它们添加视图

我知道我可以创建一个GridLayout对象,并使用

GridLayout doc = new GridLayout(3, 3);
但我不知道如何编辑所有特定属性,然后在布局中添加视图

通过Jave代码创建版面、编辑版面属性以及在版面中添加视图的最佳方法是什么

多谢各位

<GridLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:columnCount="3"
    android:rowCount="3"
    android:layout_marginBottom="10dp"
    android:background="#3c37ff00"
    android:id="@+id/doctor1"
    android:longClickable="true">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Dr. Sam"
        android:id="@+id/doctor1_name"
        android:layout_row="0"
        android:layout_column="0"
        android:textStyle="bold"
        android:textSize="26dp"
        android:typeface="sans" />

    <ImageButton
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:id="@+id/doctor1_profile"
        android:layout_row="0"
        android:layout_column="1"
        android:src="@drawable/no_pic"
        android:scaleType="fitXY"
        android:layout_rowSpan="3"
        android:layout_columnSpan="1"
        android:layout_gravity="right"
        android:background="#00ffffff" />

    <ImageButton
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:id="@+id/doctor1_action"
        android:layout_row="0"
        android:layout_column="2"
        android:src="@drawable/abc_ic_menu_paste_mtrl_am_alpha"
        android:scaleType="centerInside"
        android:layout_rowSpan="3"
        android:layout_columnSpan="1"
        android:background="#47ffffff"
        android:clickable="true"
        android:onClick="setContentView" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Very Close"
        android:id="@+id/doctor1_distance"
        android:layout_row="1"
        android:layout_column="0"
        android:textStyle="bold" />

</GridLayout>

您应该从单个xml文档和父布局开始。然后您可以给它一个id并动态调用它。您可以向该布局添加任何需要的内容。这是我做这件事的一些代码。我的父线性布局是我的:

LinearLayout ll = (LinearLayout) myInflatedView.findViewById(R.id.my_ll);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
            params.gravity = Gravity.CENTER;

            // Use this for each image in the list
            final ImageView image = new ImageView(getActivity());
            image.setAdjustViewBounds(true);            // Scales it to the screen
            image.setId(i);                             // Sets each with unique id
            ll.addView(image, params);                  // Adds the ImageView to screen BEFORE adding image (important)

            Picasso.with(getActivity())                 // THEN you add the image from photosList
                    .load(photosList.get(i))
                    .into(image);

您还可以动态地将onClickListeners添加到每个视图中。addView是动态添加视图的部件。

您可以通过以下方式在任何视图组中添加视图:

YourViewGroup.addView(yourChildView);
但我认为
ListView
会更好地为您服务,因为:

  • 您不必担心每个视图的处理
  • 你将有自动滚动
  • 您只需通过
    适配器
    管理数据即可
编辑:
对于最新的API,出于各种原因,您应该使用
RecyclerView
。它的工作原理与前面的适配器类似,您可以完成任何您想要的列表/网格行为

你确定你不想用电话吗?但是,您也可以通过
doc.addView()
将视图添加到视图组中。例如,listview在这种情况下有什么好处?您不必担心每个视图的行为,您可以通过
Adapter
Yah简单地管理数据。我正在看一个教程。这似乎是解决这个问题的方法。我必须把我的网格放在里面吗?我的问题是,我需要为列表中的每个元素设置一个3x3网格。您共享的链接已断开,或者可能我的代理连接出现问题…请检查并确认。