Pixel_Guy
@Pixel_Guy
C# программист разрабатывающий игры на unity

Где найти класс OnGlobalLayoutListener?

Нашел следующий код для проверки открыта ли клавиатура на android.
private void InitKeyboardListener()
    {
        using (AndroidJavaClass unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
        {
            AndroidJavaObject activityRootView = unityClass.GetStatic<AndroidJavaObject>("currentActivity").Call<AndroidJavaObject>("getWindow").Call<AndroidJavaObject>("getDecorView").Call<AndroidJavaObject>("getRootView");
            AndroidJavaObject observer = activityRootView.Call<AndroidJavaObject>("getViewTreeObserver");

            observer.Call("addOnGlobalLayoutListener", new OnGlobalLayoutListener(() =>
            {
                AndroidJavaClass unityClass2 = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
                var activity = unityClass2.GetStatic<AndroidJavaObject>("currentActivity");

                AndroidJavaObject rect = new AndroidJavaObject("android.graphics.Rect");
                AndroidJavaObject view = activity.Call<AndroidJavaObject>("getWindow").Call<AndroidJavaObject>("getDecorView").Call<AndroidJavaObject>("getRootView");
                view.Call("getWindowVisibleDisplayFrame", rect);

                AndroidJavaObject display = activity.Call<AndroidJavaObject>("getWindowManager").Call<AndroidJavaObject>("getDefaultDisplay");
                AndroidJavaObject size = new AndroidJavaObject("android.graphics.Point");
                display.Call("getSize", size);
                int screenHeight = size.Get<int>("y");

                int heightDiff = view.Call<AndroidJavaObject>("getRootView").Call<int>("getHeight") - (rect.Get<int>("bottom") - rect.Get<int>("top"));

                if (heightDiff > screenHeight / 3)
                {
                    // клава открылась
                }
                else
                {
                    // клава закрылась
                    // но есть проблема, если клавиатура откреплена от футера
                    // тогда логика тоже сюда пойдёт
                }
            }));
        }
    }

Жалуется на OnGlobalLayoutListener. Это не устаревший класс(по крайней мере не пишет, что устарел), а просто отсутствует ссылка на сборку. Где можно найти этот класс?

Вот ссылка на страница где я нашел код.
  • Вопрос задан
  • 82 просмотра
Пригласить эксперта
Ответы на вопрос 1
MrMureno
@MrMureno Куратор тега Unity
VR for all
а что именно жалуется?? как выглядит то кляуза?))
в джаве оно (как я понял ) выглядит как-то так
layout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {


и в андроиде не устаревший, а вот юнити небось знать не знает что такое
new OnGlobalLayoutListener

попробуйте лучше
https://forum.unity.com/threads/keyboard-height.291038/
(да без текстового поля, но куда проще и адекватнее и проверенно работает как пишут все)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы