Android 以编程方式在线性布局中添加多个framelayout
我需要将图像视图与文本视图重叠。这个组合视图将在线性布局中重复100次。我想在LinearLayout中使用FrameLayout,当FrameLayout使imageview和textview重叠时,在LinearLayout中重复FrameLayout 100次。 需要以编程方式而不是从xml文件执行此操作 我首先将图像和文本视图添加到framelayout,然后尝试将framelayout添加到linearlayout。但它表示:指定的子级已经有父级。。所以不工作。你能用密码告诉我吗?谢谢你的帮助 这将是这样的,但需要有计划地完成Android 以编程方式在线性布局中添加多个framelayout,android,android-layout,dynamically-generated,Android,Android Layout,Dynamically Generated,我需要将图像视图与文本视图重叠。这个组合视图将在线性布局中重复100次。我想在LinearLayout中使用FrameLayout,当FrameLayout使imageview和textview重叠时,在LinearLayout中重复FrameLayout 100次。 需要以编程方式而不是从xml文件执行此操作 我首先将图像和文本视图添加到framelayout,然后尝试将framelayout添加到linearlayout。但它表示:指定的子级已经有父级。。所以不工作。你能用密码告诉我吗?谢谢
---linear layout--------------
------------------------------
|frame layout----------------|
||txt view on top of img view|
------------------------------
frame layout will be repeated|
---/end of linear layout------
这里还有单独的代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
LinearLayout dynamicview = (LinearLayout) findViewById(R.id.main_layout);
FrameLayout barFrameLayout = new FrameLayout(this);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT,
Gravity.CENTER);
barFrameLayout.setLayoutParams(params);
LinearLayout.LayoutParams slparams1 = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
for (int i = 65; i <= 75; i++) {
TextView catTV = new TextView(this);
catTV.setLayoutParams(slparams1);
catTV.setText("===" + Character.toString((char) i) + "===");
catTV.setTextSize(32);
ImageView iv = new ImageView(this);
iv.setImageResource(R.drawable.ic_launcher);
iv.setLayoutParams(slparams1);
barFrameLayout.addView(catTV);
barFrameLayout.addView(iv);
dynamicview.addView(barFrameLayout);
}
}
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_测试);
LinearLayout dynamicview=(LinearLayout)findViewById(R.id.main\U布局);
FrameLayout barFrameLayout=新的FrameLayout(此);
FrameLayout.LayoutParams params=新建FrameLayout.LayoutParams(
LayoutParams.FILL\u父级,LayoutParams.WRAP\u内容,
重心);
barFrameLayout.setLayoutParams(参数);
LinearLayout.LayoutParams slparams1=新的LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_内容,
LinearLayout.LayoutParams.WRAP_内容);
对于(int i=65;i这里是演示您试图实现的目标的代码。我使用了非常灵活的RelativeLayout
,您可以轻松地相对于其他元素定位元素。(如果需要更改为FrameLayout
,您可以更改)
导入android.content.Context;
导入android.util.AttributeSet;
导入android.widget.ImageView;
导入android.widget.LinearLayout;
导入android.widget.RelativeLayout;
导入android.widget.TextView;
公共类ExampleLayout扩展了LinearLayout{
公共示例布局(上下文、属性集属性){
超级(上下文,attrs);
对于(int i=0;i<100;i++){
RelativeLayout childLayout=新的RelativeLayout(上下文);
ImageView img=新的ImageView(上下文);
TextView text=新的TextView(上下文);
RelativeLayout.LayoutParams params=新的RelativeLayout.LayoutParams(LayoutParams.MATCH\u父级,LayoutParams.MATCH\u父级);
添加视图(img,params);
params=新的RelativeLayout.LayoutParams(LayoutParams.MATCH\u父级,LayoutParams.MATCH\u父级);
params.addRule(RelativeLayout.ALIGN\u PARENT\u BOTTOM);
添加视图(文本,参数);
LinearLayout.LayoutParams parentParams=新的LinearLayout.LayoutParams(LayoutParams.WRAP\u内容,LayoutParams.WRAP\u内容);
this.addView(childLayout,parentParams);
}
}
}
然后可以使用ExampleLayout类将其添加到layout.xml文件中的任何一个
FrameLayout设计用于在屏幕上标出要显示的区域
单项
(来源:)
无论如何,您必须创建新的框架布局,而不是使用相同的框架布局
当你在做:
barFrameLayout.addView(catTV);
barFrameLayout.addView(iv);
dynamicview.addView(barFrameLayout);
您总是将这些新对象(catTV和iv)添加到FrameLayout(barFrameLayout)的同一实例中
我不认为这是您想要做的。我不确定我是否了解您正在尝试做什么…如果您能提供更多可能会有所帮助的信息。您不了解哪一点?我现在知道您正在尝试做什么,但向我们展示一些代码:)你说你试过了,但出现了一个错误。为什么不使用相对布局呢?代码很混乱,这就是为什么,而且很容易理解na?如果我使用相对布局会有什么不同?谢谢,我正在研究它。与此同时,你能看到我的代码中有什么错误吗?@durgomgiri,你只为child创建了一个framelayout实例并添加了“已经添加了子对象”这一问题是由linearlayout引起的。FrameLayout barFrameLayout=新的FrameLayout(此);
您需要在for循环内部执行此操作…!!您看起来很奇怪,为什么不让我们看看您的原始表情:?我很奇怪,这就是我处于堆栈溢出状态的原因。)
barFrameLayout.addView(catTV);
barFrameLayout.addView(iv);
dynamicview.addView(barFrameLayout);