I have to use an OnGlobalLayoutListener object and then to remove the listener, I had a problem with deprecated methods that I resolve with following code.
protected void onCreate(Bundle savedInstanceState) {     final LinearLayout llTotal = (LinearLayout) findViewById(R.id.mmc_ll);     ViewTreeObserver vto = llTotal.getViewTreeObserver();     if(vto.isAlive()){         vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {             @Override             public void onGlobalLayout() {                 //                 // mycode                 //                 if (Build.VERSION.SDK_INT<16) {                     removeLayoutListenerPre16(llTotal.getViewTreeObserver(),this);                 } else {                     removeLayoutListenerPost16(llTotal.getViewTreeObserver(), this);                 }             }          });     }     super.onCreate(savedInstanceState); }  @SuppressWarnings("deprecation") private void removeLayoutListenerPre16(ViewTreeObserver observer, OnGlobalLayoutListener listener){     observer.removeGlobalOnLayoutListener(listener); }  @TargetApi(16) private void removeLayoutListenerPost16(ViewTreeObserver observer, OnGlobalLayoutListener listener){     observer.removeOnGlobalLayoutListener(listener); }   Is it correct? There is a better way to handle compatibility?
Running the code in emulator with API 10 I have the following warning in LogCat
04-24 09:30:12.565: I/dalvikvm(471): Could not find method android.view.ViewTreeObserver.removeOnGlobalLayoutListener, referenced from method com.my.project.ActivityHome.removeLayoutListenerPost16 04-24 09:30:12.565: W/dalvikvm(471): VFY: unable to resolve virtual method 2950: Landroid/view/ViewTreeObserver;.removeOnGlobalLayoutListener (Landroid/view/ViewTreeObserver$OnGlobalLayoutListener;)V   Can I ignore them of I have to fix in some way?
I'm using this in my project:
@TargetApi(Build.VERSION_CODES.JELLY_BEAN) public static void removeOnGlobalLayoutListener(View v, ViewTreeObserver.OnGlobalLayoutListener listener){     if (Build.VERSION.SDK_INT < 16) {         v.getViewTreeObserver().removeGlobalOnLayoutListener(listener);     } else {         v.getViewTreeObserver().removeOnGlobalLayoutListener(listener);     } }   looks similar to yours. Tested on different devices (4.2.2 & 2.3.3) and it run perfectly. seems like it's the only way....If you find anything else I would like to know it. good luck
2020 EDIT This approach is very very obsolete. I hope you moved your code to Kotlin. Now we can use doOnPreDraw function when using ktx library. https://developer.android.com/reference/kotlin/androidx/core/view/package-summary#(android.view.View).doOnPreDraw(kotlin.Function1)
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