Android在Activity中动态增加xml自定义样式布局控件(引用xml布局文件和循环增加控件)
·
工程目录:

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文件中的控件来使该控件在主布局中相应地改变。
**第二种:**在主布局下动态增加多个自定义样式控件。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)