求解:android中如何实现动态插入控件

我想在原有的相对布局中,通过点击一个按钮,实现在按钮下方插入一个控件,并且原来按钮下方的布局顺延往下一行。以下是我的代码,麻烦懂的朋友帮忙填一下。我java初学。希望尽量... 我想在原有的相对布局中,通过点击一个按钮,实现在按钮下方插入一个控件,并且原来按钮下方的布局顺延往下一行。

以下是我的代码,麻烦懂的朋友帮忙填一下。我java初学。希望尽量用代码的方式来解释,文字再多我可能也看不懂。先谢谢了

package com.demo.android.text;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;

public class Text extends Activity {
private ImageButton plus_button;
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.register);

findViews();
setListener();
}
private void setListener() {
// TODO Auto-generated method stub
plus_button.setOnClickListener(plus);
}
private void findViews() {
// TODO Auto-generated method stub
plus_button = (ImageButton)findViewById(R.id.btn_add);
}
private OnClickListener plus = new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub

}
};
}
展开
 我来答
冰下沸水
推荐于2016-05-17 · TA获得超过738个赞
知道小有建树答主
回答量:178
采纳率:0%
帮助的人:232万
展开全部
直接给你上代码吧,写了我半个小时,经过了我的测试了的~

运行下就能看到结果了~关键的remove的时候有给你写注释~

布局的layout文件内容:
----------------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:id="@+id/linearlayout">

<LinearLayout android:id="@+id/LinearLayout01"
android:layout_width="wrap_content" android:layout_height="wrap_content">
<Button android:layout_height="wrap_content" android:id="@+id/add"
android:text="Add" android:layout_width="100px"></Button>
<Button android:layout_height="wrap_content"
android:layout_width="100px" android:text="Remove" android:id="@+id/remove"></Button>
</LinearLayout>
<TextView android:id="@+id/TextView01" android:text="This is textView."
android:layout_width="fill_parent" android:gravity="center"
android:layout_height="50px"></TextView>

</LinearLayout>
----------------------------------------------------------------------------------

对应Activity的内容:
----------------------------------------------------------------------------------
package com.foxconn.dialog;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.LinearLayout;

public class DialogTest extends Activity implements OnClickListener {

private Button add_btn, remove_btn;
private LinearLayout linearLayout;
private int index = 0;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViews();
register();
}

private void register() {
add_btn.setOnClickListener(this);
remove_btn.setOnClickListener(this);
}

private void findViews() {
add_btn = (Button) findViewById(R.id.add);
remove_btn = (Button) findViewById(R.id.remove);
linearLayout = (LinearLayout) findViewById(R.id.linearlayout);
}

protected View createView() {
Button btn = new Button(this);
btn.setId(index++);
btn.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
btn.setText("aaaaaa" + index);
return btn;
}

private void removeView() {
//获取linearlayout子view的个数
int count = linearLayout.getChildCount();
//研究整个LAYOUT布局,第0位的是含add和remove两个button的layout
//第count-1个是那个文字被置中的textview
//因此,在remove的时候,只能操作的是0<location<count-1这个范围的
//在执行每次remove时,我们从count-2的位置即textview上面的那个控件开始删除~
if (count - 2 > 0) {
//count-2>0用来判断当前linearlayout子view数多于2个,即还有我们点add增加的button
linearLayout.removeViewAt(count - 2);
}
}

public void onClick(View v) {
switch (v.getId()) {
case R.id.add:
linearLayout.addView(createView(), 1);
break;
case R.id.remove:
removeView();
break;
default:
break;
}
}
}
----------------------------------------------------------------------------------
追问
实测通过,激动啊!纠结了好多天的问题了。发了好多贴提问,只有你帮我解决了。代码我收下了,回家慢慢研究。
目前就10分,10分无法表达我的感谢之情。问题我再挂两天,等我攒多点财富再采纳你答案
真的是非常感谢你 非常谢谢!!!
追答
没事,你留点分下次遇到问题再问吧~

顺便,你有提问了两个一样问题,一块儿结了就好了~呵呵~
dongdng
推荐于2016-02-13 · TA获得超过8158个赞
知道大有可为答主
回答量:9168
采纳率:88%
帮助的人:2331万
展开全部
可以如下操作:

1、在一段文字中插入n个标记,比如<MARK>

2、用string.split("<MARK>")方法把该文字拆分成String数组,进而把String数组转换成TextView数组tvs[n+1]

3、蓝色按钮是自定义的控件,共有n个,用for循环和LayoutInflater方法转换成cvs[n],

4、for循环用addview的方式,按顺序把tvs[n+1]和cvs[n]一个插一个拼接起来形成一个bigview。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e394fbb
2011-04-25
知道答主
回答量:3
采纳率:0%
帮助的人:0
展开全部
不错,好好学习
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式