如何动态地添加XML的副本 [英] How to add a copy of XML dynamically

查看:161
本文介绍了如何动态地添加XML的副本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想提出一个Android应用程序,我想复制一个线性布局一些XML code,然后将其重新插入到线性布局,以便有两个线性布局相对布局。我想通过采取低于此code动态地做到这一点:

 <的LinearLayout
        机器人:ID =@ + ID / tileContainerME
        机器人:layout_width =match_parent
        机器人:layout_height =match_parent
        机器人:方向=垂直>        < RelativeLayout的
        机器人:ID =@ + ID / tilesAreHERE
        机器人:layout_width =207dp
        机器人:layout_height =151dp>        <的TextView
            机器人:ID =@ + ID / bottom1
            机器人:layout_width =WRAP_CONTENT
            机器人:layout_height =WRAP_CONTENT
            机器人:layout_alignLeft =@ + ID / TOP1
            机器人:layout_alignParentBottom =真
            机器人:重力=CENTER_HORIZONTAL
            机器人:文字=1
            />        <的TextView
            机器人:ID =@ + ID / LEFT1
            机器人:layout_width =WRAP_CONTENT
            机器人:layout_height =WRAP_CONTENT
            机器人:layout_alignParentLeft =真
            机器人:layout_centerVertical =真
            机器人:重力=center_vertical
            机器人:文字=2
             />        <的TextView
            机器人:ID =@ + ID / RIGHT1
            机器人:layout_width =WRAP_CONTENT
            机器人:layout_height =WRAP_CONTENT
            机器人:layout_alignBaseline =@ + ID / LEFT1
            机器人:layout_alignBottom =@ + ID / LEFT1
            机器人:layout_alignParentRight =真
            机器人:重力=center_vertical
            机器人:文字=3
           />        <的TextView
            机器人:ID =@ + ID / TOP1
            机器人:layout_width =WRAP_CONTENT
            机器人:layout_height =WRAP_CONTENT
            机器人:layout_alignParentTop =真
            机器人:layout_centerHorizo​​ntal =真
            机器人:重力=CENTER_HORIZONTAL
            机器人:文字=4
             />    < / RelativeLayout的>
    < / LinearLayout中>

,然后简单地把它变成这样:

 <的LinearLayout
        机器人:ID =@ + ID / tileContainerME
        机器人:layout_width =match_parent
        机器人:layout_height =match_parent
        机器人:方向=垂直>
        < RelativeLayout的
        机器人:ID =@ + ID / tilesAreHERE
        机器人:layout_width =207dp
        机器人:layout_height =151dp>        <的TextView
            机器人:ID =@ + ID / bottom1
            机器人:layout_width =WRAP_CONTENT
            机器人:layout_height =WRAP_CONTENT
            机器人:layout_alignLeft =@ + ID / TOP1
            机器人:layout_alignParentBottom =真
            机器人:重力=CENTER_HORIZONTAL
            机器人:文字=1
            />        <的TextView
            机器人:ID =@ + ID / LEFT1
            机器人:layout_width =WRAP_CONTENT
            机器人:layout_height =WRAP_CONTENT
            机器人:layout_alignParentLeft =真
            机器人:layout_centerVertical =真
            机器人:重力=center_vertical
            机器人:文字=2
             />        <的TextView
            机器人:ID =@ + ID / RIGHT1
            机器人:layout_width =WRAP_CONTENT
            机器人:layout_height =WRAP_CONTENT
            机器人:layout_alignBaseline =@ + ID / LEFT1
            机器人:layout_alignBottom =@ + ID / LEFT1
            机器人:layout_alignParentRight =真
            机器人:重力=center_vertical
            机器人:文字=3
           />        <的TextView
            机器人:ID =@ + ID / TOP1
            机器人:layout_width =WRAP_CONTENT
            机器人:layout_height =WRAP_CONTENT
            机器人:layout_alignParentTop =真
            机器人:layout_centerHorizo​​ntal =真
            机器人:重力=CENTER_HORIZONTAL
            机器人:文字=4
             />    < / RelativeLayout的>        < RelativeLayout的
        机器人:ID =@ + ID / tilesAreHERE
        机器人:layout_width =207dp
        机器人:layout_height =151dp>        <的TextView
            机器人:ID =@ + ID / bottom1
            机器人:layout_width =WRAP_CONTENT
            机器人:layout_height =WRAP_CONTENT
            机器人:layout_alignLeft =@ + ID / TOP1
            机器人:layout_alignParentBottom =真
            机器人:重力=CENTER_HORIZONTAL
            机器人:文字=1
            />        <的TextView
            机器人:ID =@ + ID / LEFT1
            机器人:layout_width =WRAP_CONTENT
            机器人:layout_height =WRAP_CONTENT
            机器人:layout_alignParentLeft =真
            机器人:layout_centerVertical =真
            机器人:重力=center_vertical
            机器人:文字=2
             />        <的TextView
            机器人:ID =@ + ID / RIGHT1
            机器人:layout_width =WRAP_CONTENT
            机器人:layout_height =WRAP_CONTENT
            机器人:layout_alignBaseline =@ + ID / LEFT1
            机器人:layout_alignBottom =@ + ID / LEFT1
            机器人:layout_alignParentRight =真
            机器人:重力=center_vertical
            机器人:文字=3
           />        <的TextView
            机器人:ID =@ + ID / TOP1
            机器人:layout_width =WRAP_CONTENT
            机器人:layout_height =WRAP_CONTENT
            机器人:layout_alignParentTop =真
            机器人:layout_centerHorizo​​ntal =真
            机器人:重力=CENTER_HORIZONTAL
            机器人:文字=4
             />    < / RelativeLayout的>
    < / LinearLayout中>

请参阅如何会有两个RelativeLayout的部分......我想基本上做一个的副本,然后将其添加回来(我真的不知道多少次,我可能不得不这样做在我的计划,这就是为什么我不是字面将它插入XML,我想从Java code做)。
这是我到目前为止,但每当我运行它,布局是错误的。什么可能是错误与我的code?

 的LinearLayout M3 =(的LinearLayout)findViewById(R.id.tileContainerME);
    RelativeLayout的M =(RelativeLayout的)findViewById(R.id.tilesAreHERE);
    RelativeLayout的M2 =新的RelativeLayout(本);    m2.setLayoutParams(m.getLayoutParams());
    m2.setGravity(m.getGravity());
    m2.setLayoutDirection(m.getLayoutDirection());
    TextView的ET1 =(的TextView)findViewById(R.id.bottom1);
    TextView的ET2 =(的TextView)findViewById(R.id.left1);
    TextView的ET3 =(的TextView)findViewById(R.id.right1);
    TextView的ET4 =(的TextView)findViewById(R.id.top1);    TextView的TV1 =新的TextView(et1.getContext());
    TextView中TV2 =新的TextView(et2.getContext());
    TextView的TV3 =新的TextView(et3.getContext());
    TextView的TV4 =新的TextView(et4.getContext());    tv1.setLayoutDirection(et1.getLayoutDirection());
    tv2.setLayoutDirection(et2.getLayoutDirection());
    tv3.setLayoutDirection(et3.getLayoutDirection());
    tv4.setLayoutDirection(et4.getLayoutDirection());    tv1.setGravity(et1.getGravity());
    tv2.setGravity(et2.getGravity());
    tv3.setGravity(et3.getGravity());
    tv4.setGravity(et4.getGravity());    tv1.setText(et1.getText());
    tv2.setText(et2.getText());
    tv3.setText(et3.getText());
    tv4.setText(et4.getText());    m2.addView(TV4,et4.getLayoutParams());
    m2.addView(TV3,et3.getLayoutParams());
    m2.addView(TV2,et2.getLayoutParams());
    m2.addView(TV1,et1.getLayoutParams());    m3.addView(2);

我看不出有什么不对我的code,有什么建​​议......

这是完整的XML数据文件:

 <的RelativeLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:工具=htt​​p://schemas.android.com/tool​​s
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    机器人:paddingBottom会=@扪/ activity_vertical_margin
    机器人:paddingLeft =@扪/ activity_horizo​​ntal_margin
    机器人:paddingRight =@扪/ activity_horizo​​ntal_margin
    机器人:paddingTop =@扪/ activity_vertical_margin
    工具:上下文=MainActivity。>
  < Horizo​​ntalScrollView
        机器人:ID =@ + ID / scrollHORIZON
        机器人:layout_width =FILL_PARENT
        机器人:layout_height =FILL_PARENT
        机器人:layout_alignParentRight =真
        机器人:layout_alignParentTop =真
        机器人:layout_toRightOf =@ + ID / linearLayout1>        <的LinearLayout
            机器人:ID =@ + ID / tileContainerME
            机器人:layout_width =WRAP_CONTENT
            机器人:layout_height =WRAP_CONTENT
            机器人:方向=横向>            < RelativeLayout的
            机器人:ID =@ + ID / tilesAreHERE
            机器人:layout_width =207dp
            机器人:layout_height =151dp>            <的TextView
                机器人:ID =@ + ID / bottom1
                机器人:layout_width =WRAP_CONTENT
                机器人:layout_height =WRAP_CONTENT
                机器人:layout_alignLeft =@ + ID / TOP1
                机器人:layout_alignParentBottom =真
                机器人:重力=CENTER_HORIZONTAL
                机器人:文字=1
                />            <的TextView
                机器人:ID =@ + ID / LEFT1
                机器人:layout_width =WRAP_CONTENT
                机器人:layout_height =WRAP_CONTENT
                机器人:layout_alignParentLeft =真
                机器人:layout_centerVertical =真
                机器人:重力=center_vertical
                机器人:文字=2
                 />            <的TextView
                机器人:ID =@ + ID / RIGHT1
                机器人:layout_width =WRAP_CONTENT
                机器人:layout_height =WRAP_CONTENT
                机器人:layout_alignBaseline =@ + ID / LEFT1
                机器人:layout_alignBottom =@ + ID / LEFT1
                机器人:layout_alignParentRight =真
                机器人:重力=center_vertical
                机器人:文字=3
               />            <的TextView
                机器人:ID =@ + ID / TOP1
                机器人:layout_width =WRAP_CONTENT
                机器人:layout_height =WRAP_CONTENT
                机器人:layout_alignParentTop =真
                机器人:layout_centerHorizo​​ntal =真
                机器人:重力=CENTER_HORIZONTAL
                机器人:文字=4
                 />        < / RelativeLayout的>
        < / LinearLayout中>
    < / Horizo​​ntalScrollView>< / RelativeLayout的>


解决方案

充气相同的布局里面再次可能会帮助你实现这一目标。

试试这个code:

  @覆盖
公共无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.main_layout);    的LinearLayout main_layout =(的LinearLayout)findViewById(R.id.tileContainerME);
    LayoutInflater吹气=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    孩子的LinearLayout =(的LinearLayout)inflater.inflate(R.layout.main_layout,NULL);
    main_layout.addView(子,1);
}

您会得到这样的:

I am making an Android app, and I want to copy some XML code in a Linear Layout, and re-insert it into the Linear Layout so that there are two of the Relative Layouts in the Linear Layout. I would like to do this dynamically by taking this code below:

 <LinearLayout
        android:id="@+id/tileContainerME"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <RelativeLayout
        android:id="@+id/tilesAreHERE"
        android:layout_width="207dp"
        android:layout_height="151dp" >

        <TextView
            android:id="@+id/bottom1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/top1"
            android:layout_alignParentBottom="true"
            android:gravity="center_horizontal"
            android:text="1"
            />

        <TextView
            android:id="@+id/left1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:gravity="center_vertical"
            android:text="2"
             />

        <TextView
            android:id="@+id/right1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/left1"
            android:layout_alignBottom="@+id/left1"
            android:layout_alignParentRight="true"
            android:gravity="center_vertical"
            android:text="3"
           />

        <TextView
            android:id="@+id/top1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:gravity="center_horizontal"
            android:text="4"
             />

    </RelativeLayout>            
    </LinearLayout>

And then simply turning it into this:

 <LinearLayout
        android:id="@+id/tileContainerME"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
        <RelativeLayout
        android:id="@+id/tilesAreHERE"
        android:layout_width="207dp"
        android:layout_height="151dp" >

        <TextView
            android:id="@+id/bottom1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/top1"
            android:layout_alignParentBottom="true"
            android:gravity="center_horizontal"
            android:text="1"
            />

        <TextView
            android:id="@+id/left1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:gravity="center_vertical"
            android:text="2"
             />

        <TextView
            android:id="@+id/right1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/left1"
            android:layout_alignBottom="@+id/left1"
            android:layout_alignParentRight="true"
            android:gravity="center_vertical"
            android:text="3"
           />

        <TextView
            android:id="@+id/top1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:gravity="center_horizontal"
            android:text="4"
             />

    </RelativeLayout>  

        <RelativeLayout
        android:id="@+id/tilesAreHERE"
        android:layout_width="207dp"
        android:layout_height="151dp" >

        <TextView
            android:id="@+id/bottom1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/top1"
            android:layout_alignParentBottom="true"
            android:gravity="center_horizontal"
            android:text="1"
            />

        <TextView
            android:id="@+id/left1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:gravity="center_vertical"
            android:text="2"
             />

        <TextView
            android:id="@+id/right1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/left1"
            android:layout_alignBottom="@+id/left1"
            android:layout_alignParentRight="true"
            android:gravity="center_vertical"
            android:text="3"
           />

        <TextView
            android:id="@+id/top1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:gravity="center_horizontal"
            android:text="4"
             />

    </RelativeLayout>                 
    </LinearLayout>

See how there would be TWO RelativeLayout sections... I would like to basically make a copy of one and then add it back in (I don't really know how many times I might have to do this in my program, that's why I am not literally inserting it into the XML, I would like to do it from the Java code). This is what I have so far, but whenever I run it, the layout is wrong. What might be wrong with my code?

            LinearLayout m3 = (LinearLayout)findViewById(R.id.tileContainerME);
    RelativeLayout m = (RelativeLayout)findViewById(R.id.tilesAreHERE);     
    RelativeLayout m2 = new RelativeLayout(this);

    m2.setLayoutParams(m.getLayoutParams());
    m2.setGravity(m.getGravity());
    m2.setLayoutDirection(m.getLayoutDirection());


    TextView et1 = (TextView) findViewById(R.id.bottom1);
    TextView et2 = (TextView) findViewById(R.id.left1);
    TextView et3 = (TextView) findViewById(R.id.right1);
    TextView et4 = (TextView) findViewById(R.id.top1);

    TextView tv1 = new TextView(et1.getContext());
    TextView tv2 = new TextView(et2.getContext());
    TextView tv3 = new TextView(et3.getContext());
    TextView tv4 = new TextView(et4.getContext());

    tv1.setLayoutDirection(et1.getLayoutDirection());
    tv2.setLayoutDirection(et2.getLayoutDirection());
    tv3.setLayoutDirection(et3.getLayoutDirection());
    tv4.setLayoutDirection(et4.getLayoutDirection());

    tv1.setGravity(et1.getGravity());
    tv2.setGravity(et2.getGravity());
    tv3.setGravity(et3.getGravity());
    tv4.setGravity(et4.getGravity());

    tv1.setText(et1.getText());
    tv2.setText(et2.getText());
    tv3.setText(et3.getText());
    tv4.setText(et4.getText());

    m2.addView(tv4,et4.getLayoutParams());
    m2.addView(tv3,et3.getLayoutParams());
    m2.addView(tv2,et2.getLayoutParams());
    m2.addView(tv1,et1.getLayoutParams());  

    m3.addView(m2);

I don't see what's wrong with my code, any suggestions.....

THIS IS THE FULL XML DATA FILE:

         <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
  <HorizontalScrollView
        android:id="@+id/scrollHORIZON"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/linearLayout1" >



        <LinearLayout
            android:id="@+id/tileContainerME"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <RelativeLayout
            android:id="@+id/tilesAreHERE"
            android:layout_width="207dp"
            android:layout_height="151dp" >

            <TextView
                android:id="@+id/bottom1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/top1"
                android:layout_alignParentBottom="true"
                android:gravity="center_horizontal"
                android:text="1"
                />

            <TextView
                android:id="@+id/left1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_centerVertical="true"
                android:gravity="center_vertical"
                android:text="2"
                 />

            <TextView
                android:id="@+id/right1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignBaseline="@+id/left1"
                android:layout_alignBottom="@+id/left1"
                android:layout_alignParentRight="true"
                android:gravity="center_vertical"
                android:text="3"
               />

            <TextView
                android:id="@+id/top1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_centerHorizontal="true"
                android:gravity="center_horizontal"
                android:text="4"
                 />

        </RelativeLayout>           
        </LinearLayout>


    </HorizontalScrollView>

</RelativeLayout>

解决方案

Inflating the same layout inside it once again might help you achieve this.

Try this code:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_layout);

    LinearLayout main_layout = (LinearLayout)findViewById(R.id.tileContainerME);
    LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    LinearLayout child = (LinearLayout) inflater.inflate(R.layout.main_layout, null);
    main_layout.addView(child, 1);
}

You'll get something like this:

这篇关于如何动态地添加XML的副本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆