其实以前没有写文章的习惯,碰到些重要的point或者纠错之类的都是直接在程序旁边注释下来(自我陶醉,以为自己会回过头来复习?),后天时间久了慢慢发现自己在重复犯一些错误,这就让人受不了了,所以感觉找一个没有人的小角落把自己认为重要的容易犯的错误整理纪录下来还是有必要的。
为什么不是CSDN?
简书的style是真的舒服。
好了,接下里切入主题,今天介绍的主要是一个动态生成、删除button的小DEMO,并且结合ScrollView保证在button的数目过多导致超出屏幕的时候能够上下拉浏览下面的button。
这里是个初始化界面,放置了三个功能键,分别是“增加按钮”、“减少按钮”、“重命名”,点击重命名按钮会直接跳转到命名界面。
界面里就简单地放了一个EditText和SubmitButton,另外这里的EditText简单地调用了PowerfulEditText这个开源库,实现整体删除,具体使用方法这里就不作过多介绍。在点击了Submit之后会跳转回初始化界面,并通过Intent将输入的内容传回。
命名界面代码片段
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle("输入新的名称");
setContentView(R.layout.name_edit);
submit=(Button) findViewById(R.id.submit);
okc=(EditText) findViewById(R.id.name);
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent1=new Intent();
String name=okc.getText().toString();
intent1.putExtra("okc",name);
setResult(RESULT_OK,intent1);
finish();
}
});
}
添加按键点击事件
addB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
layout.addView(createButton());
}
});
这里的createButton()的返回值直接是一个动态创建好的Button,在点击添加按钮之后通过addView()函数动态添加到界面中。
对了,这里的okc是全局变量,由submit传递过来。
protected View createButton(){
final Button btn=new Button(this);
btn.setId(index++);
Log.d("da","id is" + btn.getId());
btn.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
btn.setText(okc);
return btn;
}
移除按键点击事件
整个Layout布局中,“ADD BUTTON”是第0位,所以在remove的时候,只能移除3<location<count-1这个范围的Button。 if (count-3>0)用来判断是否添加的按钮。
removeB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int count=layout.getChildCount();
if (count-3>0) {
layout.removeViewAt(count-1);
}
}
});
最后附上运行效果图
Github
Github项目里的UI已经进行了优化,并且加了些新功能。