Android中使用代码动态添加子 view

Posted 邹奇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android中使用代码动态添加子 view相关的知识,希望对你有一定的参考价值。

背景

因为不能影响其他渠道,所以需要在对应渠道里使用代码动态添加子 view


布局文件

简单的写了个 demo 记录下,这里父容器使用 RelativeLayout 。布局文件代码如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/rootView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:text="imxiaoqiXxx"
        android:textColor="@android:color/black"
        android:textSize="26sp"
        android:textStyle="bold"
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</RelativeLayout>

显示如下:


添加子 View

代码也相对简单,如下:

package com.example.addviewdemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;

public class MainActivity extends AppCompatActivity {

    private ProgressBar bar;
    private RelativeLayout rootView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        addChild();
    }

    private void addChild() {
        // 获取要添加子 view 的父容器
        if (rootView == null){
            rootView = findViewById(R.id.rootView);
        }
        // 创建要添加的子 view(这里拿 ProgressBar 来做说明)
        if (bar == null){
            bar = new ProgressBar(this);
        }
        // 因为子 view 要添加到父容器 RelativeLayout 中,所以这里布局参数使用 RelativeLayout.LayoutParams
        RelativeLayout.LayoutParams params = new RelativeLayout
                .LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT);
        // 设置子 view 与父容器左下对齐(RelativeLayout.LayoutParams 独有)
        params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
        params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        // 设置子 view 的左下 margin
        params.leftMargin = 60;
        params.bottomMargin = 60;
        // 子 view 设置布局参数
        bar.setLayoutParams(params);
        // 添加子 view
        rootView.addView(bar);
    }
}


因为注释已经写的很清楚了,所以不再另作说明。

再次运行看下效果如下:

可以看到添加成功了,左下角显示了圆形进度条控件。

算了,还是抽根烟装逼吧!同学们再见!


技术永不眠!我们下期见!

以上是关于Android中使用代码动态添加子 view的主要内容,如果未能解决你的问题,请参考以下文章

LinearLayout系列:LinearLayout动态添加子View

Android 自定义View 多片叶子叶子旋转滑动

Android 怎么将fragment 动态地添加到布局中的任意位置?

Android 逆向Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 二 | 准备参数 | 远程调用 mmap 函数 )(代码片

Android 逆向修改运行中的 Android 进程的内存数据 ( 运行环境搭建 Android 模拟器安装 | 拷贝 Android 平台可执行文件和动态库到 /data/system )(代码片

Android 动态创建View,是不是可以使用 style,如何使用?