android 动态增减按钮,如何通过加减按钮实现动态EditText?

如果需要滑动就用RecyclerView,点击新增的时候往adapter里面插入数据然后更新更新视图

如果数量不会很多,直接用LinearLayout,然后点击时动态添加子View,然后重绘LinearLayout就行了

这种效果有2个主要部件, 第一个是外层的容器(后面叫父视图)用来放置具体的子视图, 可以用一个竖直的LinearLayout. 第二个就是你要动态添加的子视图, 这个子视图应该包含一个EditText和一个Button. 我假设你知道怎样创建子视图了

操作就是点击新增的按钮就在父视图中使用ViewGroup.addView()方法增加一个子视图, 也就是你说的"EditText", 然后如果父视图的大小没有发生变化的话, 就调用父视图的invalidate()方法重绘父视图, 那么你刚才add进去的子视图就会显示出来了, 也就新增成功了. 如果父视图的大小发生了变化, 就调用requestLayout(). 删除操作一样, 就是点击删除按钮的时候就用ViewGroup.removeView()删除对应的子视图, 然后再invalidate()/requestLayout()

activity的布局

android:id="@+id/main"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

>

R.layout.edt文件, 子控件的布局

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

android:layout_width="0dp"

android:layout_height="44dp"

android:layout_weight="1"/>

android:id="@+id/btn"

android:layout_width="44dp"

android:layout_height="44dp" />

activity的关键代码

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

findViewById(R.id.btn).setOnClickListener(this);

}

@Override

public void onClick(View view) {

// 父控件

final LinearLayout container = (LinearLayout) findViewById(R.id.main);

// 根据tag区分是新增view还是删除view

String tag = (String) view.getTag();

if ("-".equals(tag)) {

// 删除view

// 获取子控件

View child = (View) view.getParent();

// 从父控件中移除子控件

container.removeView(child);

} else {

// 新增view

// 创建子控件实例

View child = LayoutInflater.from(MainActivity.this).inflate(R.layout.edt, container, false);

// 获取其中的button

View btn = child.findViewById(R.id.btn);

// 监听点击事件

btn.setOnClickListener(this);

// 设置删除的tag

btn.setTag("-");

// 添加进父控件

container.addView(child);

}

// 请求重绘

container.invalidate();

}

关键代码如上

container就是上面说的父控件, 是一个LinearLayout

R.layout.edt就是上面说的子控件的布局, 其中的按钮就是R.id.btn

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值