Клавиатура скрывает 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
Ответы
Ответ 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>