android - How to force call to OnGlobalLayoutListener in inflated view -


i inflating view using call

final view view = mactivity.getlayoutinflater().inflate(r.layout.photo_view, null, false); 

the view being inflated sole purpose of turning bitmap.

the following call not working. if make call inside dialogfragment's oncreateview works -- know code snippet works. if inflating view bitmap conversion method public void ongloballayout() never called.

viewtreeobserver viewtreeobserver = view.getviewtreeobserver();     if (viewtreeobserver.isalive()) {         log.i(tag, "waiting right time");         view.getviewtreeobserver().addongloballayoutlistener(new             viewtreeobserver.ongloballayoutlistener() {                 @suppresslint("newapi")                 @override                 public void ongloballayout() {                      if (view.getlayoutparams().width <= 0 || view.getlayoutparams().height <= 0) {                         int height = getdeviceheight(mactivity);                         int width = getdevicewidth(mactivity);                         layoutparams layout = view.getlayoutparams();                         layout.height = height;                         layout.width = width;                         view.setlayoutparams(layout);                     }                      domywork(view);                     if (utils.hasjellybean()) {                         view.getviewtreeobserver().removeongloballayoutlistener(this);                     } else {                         view.getviewtreeobserver().removeglobalonlayoutlistener(this);                     }                  }             });     } 

i need method because want have non-zero dimension create bitmap otherwise null say, view.getdrawingcache(). how force execution of viewtreeobserver.ongloballayoutlistener

your view never attached window -- never laid out framework. need either attach window (e.g. put in layout somewhere) or measure , lay out manually.

int widthspec = measurespec.makemeasurespec(width, measurespec.exactly); int heightspec = measurespec.makemeasurespec(height, measurespec.exactly);  view.measure(widthspec, heightspec); view.layout(view.getmeasuredwidth(), view.getmeasuredheight()); 

Comments

Popular posts from this blog

node.js - Mongoose: Cast to ObjectId failed for value on newly created object after setting the value -

gradle error "Cannot convert the provided notation to a File or URI" -

python - NameError: name 'subprocess' is not defined -