如何动态地添加XML的副本 [英] How to add a copy of XML dynamically
问题描述
我想提出一个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_centerHorizontal =真
机器人:重力=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_centerHorizontal =真
机器人:重力=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_centerHorizontal =真
机器人:重力=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:机器人=http://schemas.android.com/apk/res/android
的xmlns:工具=http://schemas.android.com/tools
机器人:layout_width =match_parent
机器人:layout_height =match_parent
机器人:paddingBottom会=@扪/ activity_vertical_margin
机器人:paddingLeft =@扪/ activity_horizontal_margin
机器人:paddingRight =@扪/ activity_horizontal_margin
机器人:paddingTop =@扪/ activity_vertical_margin
工具:上下文=MainActivity。>
< HorizontalScrollView
机器人: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_centerHorizontal =真
机器人:重力=CENTER_HORIZONTAL
机器人:文字=4
/> < / RelativeLayout的>
< / LinearLayout中>
< / HorizontalScrollView>< / 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屋!