安卓基础(点击按钮动态添加视图到容器)

发布于:2025-05-09 ⋅ 阅读:(19) ⋅ 点赞:(0)

布局文件 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();
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到