經過關於這個話題的許多問題,我仍然沒有完全解決這個問題。 最後,第一個圖像視圖總是被「覆蓋」,或者說更好地被另一個視圖重疊,該視圖應該放在該視圖的右側。Android動態RelativeLayout和子視圖創建
在擴展RelativeLayout之後,是否只需要覆蓋子視圖佈局的onLayout()方法就足夠了? onLayout方法是將所有的孩子放在一個通行證中,還是每個特定的孩子都需要?如果我想使用RelativeLayouts特定的placemnts(RIGHT_OF,BELOW等...),那麼onLayout方法應該如何實現子部署?
在創建視圖時,如何創建一個沒有layoutparams的視圖,甚至有可能嗎?
編輯:好的,我避免使用任何形式的getWidth,仍然得到不好的佈局。圖標第一行混合但滿(5個圖標),下一行只有1個圖標,2個丟失。在這一點上,我非常沮喪,因爲這是一個愚蠢的問題,我似乎無法找到問題所在,爲什麼官方開發者教程對動態佈局和視圖有更多幫助?
從向下Log.e說: 2:RIGHT 1 3:RIGHT 2 4:3 5 RIGHT:RIGHT OF 4 6:低於1 7:RIGHT OF 6 8:RIGHT OF 7 9:正確的8
這就是它應該是這樣但它不起作用的方式,我不能設置相對位置佈局應該已經佈局?
private void loadResources() {
cursor = managedQuery(Browser.BOOKMARKS_URI, projection, selection,
null, SORT_BY_COLUMN + " " + SORT_ORDER);
this.startManagingCursor(cursor);
ImageView previousBookmark;
int idOfViewToTheLeft = 1;
if(cursor.moveToFirst()) {
bookmarkCounter = 1;
ByteArrayInputStream blobImage;
int size = (int) scale * FAVICON_SIZE;
int screenWidth = getWindowManager().getDefaultDisplay().getWidth();
int rowBookmarkCount = (int) (screenWidth/(size + scale*leftMargin));
do{
bookmark = new ImageView(this);
bookmark.setId(bookmarkCounter++);
bookmark.setBackgroundColor(Color.WHITE);
blobImage = new ByteArrayInputStream(
cursor.getBlob(cursor.getColumnIndex(BookmarkColumns.FAVICON)));
bookmark.setImageDrawable(
Drawable.createFromStream(blobImage, "" + bookmark.getId()));
urls.put(bookmark.getId(),
cursor.getString(
cursor.getColumnIndex(BookmarkColumns.URL)));
bookmark.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent browserIntent = new Intent(
Intent.ACTION_VIEW, Uri.parse(urls.get(v.getId())));
startActivity(browserIntent);
}
});
lp = new RelativeLayout.LayoutParams(size, size);
lp.topMargin = (int) (scale * topMargin);
lp.leftMargin = (int) (scale * leftMargin);
if(bookmark.getId() > 1) {
previousBookmark = (ImageView) findViewById(bookmark.getId() - 1);
if((bookmark.getId() % (rowBookmarkCount + 1)) != 0)
{
Log.e("" + bookmark.getId(), "RIGHT OF " + previousBookmark.getId());
lp.addRule(RelativeLayout.RIGHT_OF, previousBookmark.getId());
} else {
Log.e("" + bookmark.getId(), "BELOW " + idOfViewToTheLeft);
lp.addRule(RelativeLayout.BELOW, idOfViewToTheLeft);
idOfViewToTheLeft = bookmark.getId();
}
}
bookmarkLayout.addView(bookmark, lp);
} while (cursor.moveToNext());
}
}
見這就是問題所在,他們告訴我,我不能在創建更改視圖位置,因爲我需要它不能在該階段中使用的getWidth方法。 @AlexOrlov – lpandzic 2011-02-15 15:40:53
如果我記得正確的話,onMeasure會在onLayout之前調用,這就是您可以通過父級強制獲取佈局的尺寸。 在我的練習中,通過getWidth獲取維度對於這樣的任務是毫無意義和錯誤的。 – 2011-02-15 15:51:58