当前位置: 首页 > ds >正文

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

布局文件 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"><!-- 按钮:点击后添加视图到容器 --><Buttonandroid:id="@+id/addButton"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:text="点击添加新条目" /><!-- 容器:用于动态添加视图(这里使用垂直的 LinearLayout) --><LinearLayoutandroid: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; // 记录添加的条目数量@Overrideprotected 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() {@Overridepublic void onClick(View v) {// 创建新的 TextView 作为要添加的视图TextView newItem = createNewItem();// 将新视图添加到容器中contentContainer.addView(newItem);}});}/*** 创建新的视图(这里以 TextView 为例)*/private TextView createNewItem() {itemCount++; // 条目数量自增// 创建 TextViewTextView 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 --><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="按钮 1" /><!-- 按钮 2 --><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="按钮 2"android:layout_marginTop="8dp" /><!-- 展示 JSON 内容的 TextView --><TextViewandroid: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<>();@Overrideprotected 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() {@Overridepublic void onClick(View v) {addContent("按钮 1 的内容");}});// 按钮 2 的点击事件button2.setOnClickListener(new View.OnClickListener() {@Overridepublic 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 --><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="按钮 1" /><!-- 按钮 2 --><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="按钮 2"android:layout_marginTop="8dp" /><!-- 导出按钮 --><Buttonandroid:id="@+id/exportButton"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="导出内容"android:layout_marginTop="16dp" /><!-- 内容容器 --><LinearLayoutandroid: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;@Overrideprotected 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() {@Overridepublic void onClick(View v) {addContentToContainer("按钮 1 的内容");}});// 按钮 2 的点击事件button2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {addContentToContainer("按钮 2 的内容");}});// 导出按钮的点击事件exportButton.setOnClickListener(new View.OnClickListener() {@Overridepublic 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();}
}

http://www.xdnf.cn/news/4392.html

相关文章:

  • ABAQUS三维CT重建插件CT2Model3D V2版本
  • MySQL初阶:基础增删改查(CRUD)
  • docker stack deploy多服务集群堆栈搭建详细指南
  • 实现滑动选择器从离散型的数组中选择
  • Prometheus的安装部署
  • create-vue搭建Vue3项目(Vue3学习2)
  • Transformer面经
  • JavaScript性能优化实战:从瓶颈分析到解决方案
  • 0-带在线搜索和自适应的尺度组合优化神经改进启发式算法(未完)(code)
  • 连接mysql时 Public Key Retrieval is not allowed 问题
  • 前端面试每日三题 - Day 26
  • RabbitMQ 添加新用户和配置权限
  • 龙虎榜——20250506
  • python的selenium操控浏览器
  • k8s service的类型
  • 如何选择 边缘计算服务器
  • HPE推出零信任网络与私有云运维解决方案
  • javaweb-Filter
  • 黄金量化:高频实时的贵金属API
  • Python实现NOA星雀优化算法优化Catboost回归模型项目实战
  • 京东(JD)API 商品详情数据接口讲解及 JSON 示例
  • el-row el-col
  • 【基于SSM+Vue+Mysql】健身房俱乐部管理系统(附源码+数据库脚本)
  • 大模型系列(三)--- GPT1论文研读
  • ETL交通行业案例丨某大型铁路运输集团ETL数据集成实践
  • shell-流程控制-循环-函数
  • Spring Boot操作MongoDB的完整示例大全
  • 4.29 tag的完整实现和登录页面的初步搭建
  • 【Pandas】pandas DataFrame agg
  • 优化算法 - intro