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
Post a Comment