onGlobalLayout () вызывается без видимого изменения макета - PullRequest
0 голосов
/ 15 октября 2018

У меня есть слушатель программной клавиатуры, который хорошо работает (за исключением одного занятия).Вот оно.

public static void setKeyboardListener(final Activity activity, final ImageView iv_header){
    final View view =activity.findViewById(android.R.id.content);
    view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout(){

            //get cached screen height
            String s_heightRoot =StringCacheFactory.stringCache.get("screen_height");
            int heightRoot = (s_heightRoot ==null) ? 0 : FormatFactory.tryParseStringToInt(s_heightRoot);

            //get height when onGlobalLayout is called
            Rect measureNewRect = new Rect();
            view.getWindowVisibleDisplayFrame(measureNewRect);
            int heightNew =measureNewRect.bottom;

            if ((heightNew < heightRoot) || (heightRoot ==0)){
                //screen has shrunk, keyboard open, perform awesome code
                view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            }else{
                //full screen, do nothing
                view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            }
        }
    });
}

Для всех действий слушатель ожидает изменения экрана, а затем вызывает onGlobalLayout ().Но одно действие onGlobalLayout () вызывается немедленно (без смены экрана).Это действие является уникальным в том смысле, что оно подразумевает следующее:

public class PlacesActivity extends AppCompatActivity implements
    GoogleApiClient.OnConnectionFailedListener,
    GoogleApiClient.ConnectionCallbacks {
    //lotsa code
}

PlacesActivity имеет AutoCompleteTextView, где пользователь выбирает город по всему миру с помощью API Google Адресов.Эти обратные вызовы мешают моему onGlobalLayoutListener?

Любые другие ситуации, когда onGLobalLayout() может быть вызван без видимого изменения макета?

AutoCompleteTextView вызывает onGlobalLayout()?

...