布局文件 activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<!-- 按钮:点击后添加视图到容器 -->
<Button
android:id="@+id/addButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="点击添加新条目" />
<!-- 容器:用于动态添加视图(这里使用垂直的 LinearLayout) -->
<LinearLayout
android:id="@+id/contentContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginTop="24dp"
android:padding="16dp">
</LinearLayout>
</LinearLayout>
主活动代码 MainActivity.java
package com.example.dynamicaddview;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private LinearLayout contentContainer; // 容器
private int itemCount = 0; // 记录添加的条目数量
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化视图
Button addButton = findViewById(R.id.addButton);
contentContainer = findViewById(R.id.contentContainer);
// 设置按钮点击事件
addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 创建新的 TextView 作为要添加的视图
TextView newItem = createNewItem();
// 将新视图添加到容器中
contentContainer.addView(newItem);
}
});
}
/**
* 创建新的视图(这里以 TextView 为例)
*/
private TextView createNewItem() {
itemCount++; // 条目数量自增
// 创建 TextView
TextView textView = new TextView(this);
textView.setText("新条目 " + itemCount); // 设置文本内容
textView.setTextSize(16); // 设置文字大小
textView.setTextColor(getResources().getColor(android.R.color.black)); // 设置文字颜色
// 设置布局参数(边距、内边距、背景等)
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, // 宽度充满父容器
LinearLayout.LayoutParams.WRAP_CONTENT // 高度包裹内容
);
params.setMargins(0, 0, 0, 16); // 底部边距 16dp,使条目之间有间隔
textView.setLayoutParams(params);
// 设置背景(示例:灰色边框)
textView.setBackgroundResource(android.R.drawable.border_line);
textView.setPadding(16, 16, 16, 16); // 内边距 16dp
// 设置文字居中
textView.setGravity(Gravity.CENTER);
return textView;
}
}
在 Android 开发里实现点击两个按钮,分别添加不同内容到容器,并且按顺序以 JSON 格式展示出来。
创建布局文件 activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<!-- 按钮 1 -->
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮 1" />
<!-- 按钮 2 -->
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮 2"
android:layout_marginTop="8dp" />
<!-- 展示 JSON 内容的 TextView -->
<TextView
android:id="@+id/jsonTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:textSize="16sp" />
</LinearLayout>
MainActivity.java
package com.example.jsonaddcontent;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private Button button1, button2;
private TextView jsonTextView;
private List<String> contentList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化视图
button1 = findViewById(R.id.button1);
button2 = findViewById(R.id.button2);
jsonTextView = findViewById(R.id.jsonTextView);
// 按钮 1 的点击事件
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addContent("按钮 1 的内容");
}
});
// 按钮 2 的点击事件
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addContent("按钮 2 的内容");
}
});
}
// 添加内容到列表并更新 JSON 显示
private void addContent(String content) {
contentList.add(content);
updateJsonDisplay();
}
// 更新 JSON 显示
private void updateJsonDisplay() {
JSONArray jsonArray = new JSONArray();
for (String content : contentList) {
try {
JSONObject jsonObject = new JSONObject();
jsonObject.put("content", content);
jsonArray.put(jsonObject);
} catch (JSONException e) {
e.printStackTrace();
}
}
jsonTextView.setText(jsonArray.toString());
}
}
Android 示例代码,实现了点击两个按钮分别添加不同内容到容器中,再点击导出按钮将容器中的内容按顺序以 JSON 格式通过弹窗呈现出来。
布局文件 activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<!-- 按钮 1 -->
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮 1" />
<!-- 按钮 2 -->
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮 2"
android:layout_marginTop="8dp" />
<!-- 导出按钮 -->
<Button
android:id="@+id/exportButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="导出内容"
android:layout_marginTop="16dp" />
<!-- 内容容器 -->
<LinearLayout
android:id="@+id/contentContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginTop="16dp" />
</LinearLayout>
主活动代码 MainActivity.java
package com.example.jsoncontentexport;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class MainActivity extends AppCompatActivity {
private Button button1, button2, exportButton;
private LinearLayout contentContainer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化视图
button1 = findViewById(R.id.button1);
button2 = findViewById(R.id.button2);
exportButton = findViewById(R.id.exportButton);
contentContainer = findViewById(R.id.contentContainer);
// 按钮 1 的点击事件
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addContentToContainer("按钮 1 的内容");
}
});
// 按钮 2 的点击事件
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addContentToContainer("按钮 2 的内容");
}
});
// 导出按钮的点击事件
exportButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showExportedJson();
}
});
}
// 添加内容到容器
private void addContentToContainer(String content) {
TextView textView = new TextView(this);
textView.setText(content);
contentContainer.addView(textView);
}
// 生成 JSON 字符串
private String generateJsonString() {
JSONArray jsonArray = new JSONArray();
int childCount = contentContainer.getChildCount();
for (int i = 0; i < childCount; i++) {
View child = contentContainer.getChildAt(i);
if (child instanceof TextView) {
TextView textView = (TextView) child;
String text = textView.getText().toString();
try {
JSONObject jsonObject = new JSONObject();
jsonObject.put("content", text);
jsonArray.put(jsonObject);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
return jsonArray.toString();
}
// 以弹窗形式展示导出的 JSON 内容
private void showExportedJson() {
String jsonString = generateJsonString();
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("导出内容(JSON 格式)")
.setMessage(jsonString)
.setPositiveButton("确定", null)
.show();
}
}