Динамическое создание представлений и методов getWidth на Android - PullRequest
0 голосов
/ 12 февраля 2011

У меня были проблемы с методами getWidth макетов и представлений, поэтому я попытался разделить создание и размещение представлений внутри родительского элемента.При запуске действие запускает метод loadResources (), который получает все значки из базы данных, создает для них представления изображений и в другом цикле после назначения их родительскому объектуlativeLayout пытается разместить их на экране.Но на экране ничего нет ??

Вот код:

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

     }
    }

}

Ответы [ 2 ]

1 голос
/ 27 февраля 2011

если я могу правильно понять ваш вопрос, я думаю, это то, на что вам нужно обратить внимание ............ используйте onSizeChange () вашего взгляда ........ вотРасширенный фрагмент кода http://syedrakibalhasan.blogspot.com/2011/02/how-to-get-width-and-height-dimensions.html

1 голос
/ 21 февраля 2011

Я решил эту проблему, разработав математику вручную с шириной экрана и установив поля параметров макета.

...