Подтвердить что ты не робот

Клавиатура скрывает EditText, когда android: windowTranslucentStatus = true

Мы применяем новую прозрачную тему для Android KitKat в наших приложениях, и мы получаем странную проблему, когда появляется клавиатура. Если мы не используем новый атрибут android:windowTranslucentStatus, все работает как обычно: экран изменяется, и все остается видимым. Но когда мы используем android:windowTranslucentStatus, экран не изменяется, а наш EditText становится скрытым с клавиатуры.

Образец проблемы: http://fewlaps.com/xtra/quitnowStackoverflow.png

Единственное различие между экранами в атрибуте в стиле:

Первый экран: <item name="android:windowTranslucentStatus">false</item>

Второй экран: <item name="android:windowTranslucentStatus">true</item>

Мы считаем, что это ошибка в выпуске Kitkat, но мы хотим, чтобы вы знали об этом. Мы немного разозлились. Конечно, если у кого-то есть решение, это будет потрясающе.

EDIT: я просто добавил эту проблему в трекер Android. Вероятно, вам будет интересно в главной роли проблема: https://issuetracker.google.com/issues/36986276

4b9b3361

Ответ 1

Я также столкнулся с этой очень раздражающей проблемой. Но в итоге я получил эту работу:

<style name="Theme.MyApp">
    <item name="android:windowTranslucentStatus">true</item>
</style>

Вместо установки fitSystemWindows = "true" в теме я установил его в корневом представлении моего макета.

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:fitsSystemWindows="true"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</FrameLayout>

Я также использую большой SystemBarTintManager в своей деятельности:

new SystemBarTintManager(this).setStatusBarTintEnabled(true);

Это, кажется, работает хорошо, но, по общему признанию, кажется довольно изменчивым. Надеюсь, что это кому-то поможет!

Ответ 2

Обходной путь:

Добавьте Touch или Focus или ClickListener и передвиньте макет EditText до половины экрана. Однако на самом деле это не так, как должно работать, поэтому держите пальцы в руках и надейтесь, что Google зафиксирует это.

EditText e = new EditText(this);
    e.setOnFocusChangeListener(new OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if(hasFocus)
                v.animate().x(screenHeight/2f).start();
            else
                v.animate().x(screenHeight).start();
        }
    });

Просто настройте v на ваш макет холдинга и убедитесь, что позиции, которые вы двигаете, выглядят хорошо.

Ответ 3

поместите это ниже строк после того, как он появился в вашей деятельности.

    int currentapiVersion = android.os.Build.VERSION.SDK_INT;
    if (currentapiVersion >= android.os.Build.VERSION_CODES.LOLLIPOP) {
        Window window = this.getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        window.setStatusBarColor(mCategoryColors.getColorStatusBar());
    }

Работайте со мной:)

Ответ 4

Это не идеальное решение, но обходным решением, которое я нашел, было установить android:windowSoftInputMode="adjustPan" в AndroidManifest.xml.

Обратите внимание, что это полностью отключит все окно от клавиатуры, а не изменит его размер.

Подробнее здесь (поиск windowSoftInputMode).

Ответ 5

Добавьте также

<item name="android:fitsSystemWindows">true</item>