我要做的是创建ImageVIEw对象R.ID.tile的N(在本例中为9)副本,将它们中的每一个放置在布局上的不同坐标上,并为每个坐标提供其自己的唯一标识符.
board_layout.xml:
<?xml version="1.0" enCoding="utf-8"?><relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="fill_parent" androID:layout_height="fill_parent" androID:background="@drawable/backgroundcolor" androID:orIEntation="vertical" > <linearLayout androID:ID="@+ID/topbar" ... > <Imagebutton androID:ID="@+ID/imagebutton" ... /> </linearLayout> <relativeLayout androID:ID="@+ID/board" androID:layout_wIDth="match_parent" androID:layout_height="345dp" androID:layout_centerVertical="true" androID:background="@drawable/wwfboard" > <vIEw androID:ID="@+ID/myVIEw" androID:layout_wIDth="fill_parent" androID:layout_height="fill_parent" /> <ImageVIEw androID:ID="@+ID/tile" androID:layout_wIDth="21dp" androID:layout_height="21dp" androID:src="@drawable/tile" /> </relativeLayout></relativeLayout>
BoardLayout.class:
@OverrIDeprotected voID onCreate(Bundle savedInstance){ super.onCreate(savedInstance); setContentVIEw(R.layout.board_layout); LayoutInflater inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); VIEw[] tiles = new ImageVIEw[9]; entire_layout = (relativeLayout)findVIEwByID(R.layout.board_layout); for(int i = 0; i<tiles.length; i++){ tiles[i] = (ImageVIEw) inflater.inflate(R.layout.board_layout, null); tiles[i].setID(1000+i); params = new relativeLayout.LayoutParams(-1, 345); params.leftmargin = 32*2*i; params.topmargin = 34*2*i; entire_layout.addVIEw(tiles[i]); } ...
但是,我一直在最后一行得到“Source not found”错误:layout.addVIEw(tiles [i]); ..
有什么想法吗?
(旁边问题:如果你正在使用坐标,那么relativeLayout比absoluteLayout好吗?)
解决方法:
编辑:
首先使用一个具有您喜欢的属性的ImageVIEw创建布局
例:
在res / layout / singleimage.xml中创建文件
<?xml version="1.0" enCoding="utf-8"?><ImageVIEw xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:ID="@+ID/image2" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:src="@drawable/ic_launcher" androID:contentDescription="Sample"/>
然后给ImageVIEw充气以获得它的副本
VIEw[] tiles = new ImageVIEw[9];// get reference to LayoutInflaterLayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);for(int i = 0; i<tiles.length; i++) { //Creating copy of imagevIEw by inflating it ImageVIEw image = (ImageVIEw) inflater.inflate(R.layout.singleimage, null); tiles[i] = image; tiles[i].setID(i); relativeLayout.LayoutParams params = new relativeLayout.LayoutParams(-1, 345); params.leftmargin = 32*2*3; params.topmargin = 34*2*3; layout.addVIEw(tiles[i]);}
你在这里设置了ID值
tiles[i].setID(i);
但是你(错误地)试图从你的其他资源(你想要’克隆’)获得它:
layout.addVIEw(tiles[i] = (ImageVIEw) findVIEwByID(R.ID.tile)); // INCORRECT
相反,如上所述手动设置ID,然后:
layout.addVIEw(tiles[i]);
并且无需调用findVIEwByID()
总结以上是内存溢出为你收集整理的android – 如何在布局上为ImageView对象的新副本充气?全部内容,希望文章能够帮你解决android – 如何在布局上为ImageView对象的新副本充气?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)