Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 以编程方式在线性布局中添加多个framelayout_Android_Android Layout_Dynamically Generated - Fatal编程技术网

Android 以编程方式在线性布局中添加多个framelayout

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。但它表示:指定的子级已经有父级。。所以不工作。你能用密码告诉我吗?谢谢

我需要将图像视图与文本视图重叠。这个组合视图将在线性布局中重复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);