2011-02-12 65 views
0

我对布局和视图上的getWidth方法有问题,所以我尝试在父窗体中分离创建和放置视图。在开始时,活动启动loadResources()方法,该方法从数据库获取所有图标,为它们和其他循环创建图像,然后将它们分配给relativeLayout父代尝试将它们放置在屏幕上。但屏幕上没有什么?动态创建视图和getWidth方法android

下面的代码:

private void loadResources() { 

    cursor = managedQuery(Browser.BOOKMARKS_URI, projection, selection, 
    null, Browser.BookmarkColumns.VISITS + " DESC"); 

    if(cursor.moveToFirst()) { 
     bookmarkCounter = 1; 
     ByteArrayInputStream blobImage; 

     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())); 

      params = new RelativeLayout.LayoutParams(
        (int) (40 * scale), (int) (40 * scale)); 

      params.topMargin = (int) (scale * 20); 
      params.leftMargin = (int) (scale * 20); 
      relativeLayout.addView(bookmark, params); 
     } while (cursor.moveToNext()); 

     int idOfViewToTheLeft = 1; 

     for(int counter = 1; counter < bookmarkCounter; counter++) { 

      bookmark = (ImageView) findViewById(counter); 

      Log.v("WIDTH", "" + relativeLayout.getWidth()); 

      if(bookmarkCounter > 1) { 
       if(relativeLayout.getWidth() > (bookmark.getLeft() + bookmark.getWidth())) { 
        params.addRule(RelativeLayout.RIGHT_OF, bookmark.getId() - 1); 
       } else { 
        params.addRule(RelativeLayout.BELOW, idOfViewToTheLeft); 
        idOfViewToTheLeft = bookmark.getId(); 
       } 
      } 

      bookmark.setScaleType(ScaleType.CENTER_CROP); 

      bookmark.setLayoutParams(params); 
     } 

     setContentView(R.layout.main); 

    } 
    } 

}

+0

您将`setcontentview`放在方法的最后,并且只会将空的unbinded layout.main应用于屏幕。 – xandy 2011-02-12 11:08:18

回答

1

我用手动屏幕显示宽度工作了数学和设置布局则params的利润率解决了这个问题。