I am working on a fragment and I want to get the dimension of a layout
contained in the xml
fragment layout
. When I try the code
RelativeLayout myLayout = view.findViewById(R.id.myLayout); myLayout.getHeight();
it returns 0. I need these dimensions to put inside myLayout other objects.
I try to use:
myLayout.getViewTreeObserver().addOnGlobalLayoutListener( new ViewTreeObserver.OnGlobalLayoutListener(){ @Override public void onGlobalLayout() { mHeight = myLayout.getHeight(); mWidth= myLayout.getWidth(); System.out.println("width: "+mWidth+" height: "+mHeight); } });
but this code is invoke a lot of time and I don't know exactly when it is execute. I need these dimensions into public void onActivityCreated ()
method. Is it possible?
getHeight(); mWidth= myLayout. getWidth(); System. out. println("width: "+mWidth+" height: "+mHeight); } });
private int width, height; RelativeLayout rlParent = (RelativeLayout) findViewById(R. id. rlParent); w = rlParent. getWidth(); h = rlParent.
There's a cleaner solution to this, just use the View.post()
method on your fragment's root view, and you can call getMeasuredHeight()/getMeasuredWidth()
and get the actual values.
E.g.
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View root = inflater.inflate(R.layout.myfragment, container, false); root.post(new Runnable() { @Override public void run() { // for instance int height = root.getMeasuredHeight(); } }); return root; }
Very neat and tidy and no messy mucking about with the ViewTreeObserver
.
I've only tested this with android-23 devices, but the API has had this method since level 1.
Anyway, WFM.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With