工程目录:
在这里插入图片描述
MainActivity

package com.example.test1121;

import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ActionBar bar=getSupportActionBar();
        bar.hide();

        //增加XML样式控件布局
        final LayoutInflater inflater = LayoutInflater.from(this);

        //被插入的布局
        final LinearLayout layout1 = (LinearLayout) findViewById(R.id.linearLayout);

        //插入的布局
        LinearLayout layout2 = (LinearLayout) inflater.inflate(R.layout.btn_layout, null).findViewById(R.id.btn_layout);
        layout1.addView(layout2);

        //动态增加自定义xml样式控件
        String s="我是动态增加的自定义xml样式按钮";
        char c[]=s.toCharArray();
        for(char t:c){
            final Button btn=new Button(getApplicationContext());
            btn.setBackgroundResource(R.drawable.btn_style);
            btn.setText(""+t);
            btn.setTextSize(12);
            btn.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View v) {
                    btn.setWidth(72);
                    btn.setHeight(72);
                    v.setMinimumHeight(72);
                    v.setMinimumWidth(72);
                }
            });
            layout2.addView(btn);

            //之所以在这里回调onclick是因为在绘制图形时有一个绘制时间,get/setHeight、get/setWidth来设置控件会显示高宽为0,用了好多方法,只有这个方法有效
            btn.callOnClick();
        }
    }
}

btn_style.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!--按下-->
    <item android:state_pressed="true">
        <shape>
            <gradient android:startColor="#90CAF9" android:endColor="#90CAF9"
                android:angle="270" />
            <stroke android:width="1px" android:color="#0088F1FF" />
            <corners android:radius="25dip" />
            <padding android:left="10dp" android:top="10dp"
                android:right="10dp" android:bottom="10dp" />
            <size android:height="10dp" android:width="10dp"/>
            <size
                android:width="10dp"  android:height="10dp" />
        </shape>
    </item>

    <!--抬起-->
    <item>
        <shape>
            <gradient android:startColor="#C5E1A5" android:endColor="#C5E1A5"
                android:angle="180" />
            <stroke android:width="1px" android:color="#00111010" />
            <corners android:radius="25dip" />
            <padding android:left="0dp" android:top="0dp"
                android:right="0dp" android:bottom="0dp" />
            <size
                android:width="10dp"  android:height="10dp" />
        </shape>
    </item>
</selector>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <HorizontalScrollView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scrollbars="none">
            <LinearLayout
                android:id="@+id/linearLayout"
                android:layout_width="match_parent"
                android:layout_height="36dp"
                android:gravity="center"
                android:orientation="horizontal">
            </LinearLayout>
        </HorizontalScrollView>
    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

btn_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/btn_layout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <Button
        android:id="@+id/btn0"
        android:background="@drawable/btn_style"
        android:layout_width="34sp"
        android:textSize="12dp"
        android:layout_height="34sp"
        android:text="1"/>
    <Button
        android:id="@+id/btn1"
        android:background="@drawable/btn_style"
        android:layout_width="34sp"
        android:textSize="12dp"
        android:layout_height="34sp"
        android:text="2"/>
    <Button
        android:id="@+id/btn2"
        android:background="@drawable/btn_style"
        android:layout_width="34sp"
        android:textSize="12dp"
        android:layout_height="34sp"
        android:text="3"/>
    <Button
        android:id="@+id/btn3"
        android:background="@drawable/btn_style"
        android:layout_width="34sp"
        android:textSize="12dp"
        android:layout_height="34sp"
        android:text="4"/>
</LinearLayout>

在这里插入图片描述
以上就是在Android的Activity中动态增加布局和控件的两种方法。
大致思路:
**第一种:**在主布局下增加另外一个xml布局文件。在Activity中可以通过findViewById改变另一个xml文件中的控件来使该控件在主布局中相应地改变。
**第二种:**在主布局下动态增加多个自定义样式控件。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐