Так получилось, что InputMethodManager
не хранит в себе текущее состояние клавиатуры, под "состояние" подразумевается видна или не видна системная клава. Есть код, который работает на всех версиях кроме Lollipopa.
/**
* It checks that keyboard is showing now.
*
* @return {@code true} if keyboard is showing, {@code false} otherwise.
*/
public static boolean isKeyboardShown() {
InputMethodManager imm = (InputMethodManager) solo.getCurrentActivity().getSystemService(
Context.INPUT_METHOD_SERVICE);
// Software keyboard can be opened only if InputMethodManager exists and active for current context.
if (imm != null && imm.isActive() && isKeyboardActive) {
// In "full screen edit mode" keyboard is shown.
if (UIHelpers.isFullscreenEditMode())
return true;
// If diff between screen height and android:id/content view height more than 0 then keyboard is shown.
if (VIEW_CONTENT_WITHOUT_KEYBOARD.isVisible() && getKeyboardHeightRelativeToAndroidContent() != 0)
return true;
// If opened dialog and shift more than 2px then keyboard shown. Value of 2px is permissible error of method getDialogShift().
if (DialogHelpers.getDialogShift() > 2) {
return true;
}
}
return false;
}
абсолютно всегда возвращает true
imm != null && imm.isActive()
но в lollipope еще и возвращает true
вот это условие
if (VIEW_CONTENT_WITHOUT_KEYBOARD.isVisible() &&
getKeyboardHeightRelativeToAndroidContent() != 0)
где
/**
* Returns the height of keyboard as difference between "android:id/content" view height and bottom of used {@link
* android.view.Window}. Returns height only if it more than {@link #MINIMUM_KEYBOARD_HEIGHT} for platform less
* then "Marshmallow". For "Marshmallow" platform returns real height of keyboard.
* NOTE: not working in fullscreen edit mode and for dialogs (always returns {@code 0}).
*
* @return Height of keyboard (in pixels).
*/
public static int getKeyboardHeightRelativeToAndroidContent() {
View contentView = VIEW_CONTENT_WITHOUT_KEYBOARD.assertExists();
Rect rect = new Rect();
contentView.getWindowVisibleDisplayFrame(rect);
if (isAndroidMarshmallowOrNewer()) {
//Note: contentView.getRootView() return full height of screen with navigation bar for marshmallow platform
//but for less platform without navigation bar.
return ((View) contentView.getParent().getParent()).getHeight() - rect.bottom;
} else {
int height = contentView.getRootView().getHeight() - rect.bottom;
return height > MINIMUM_KEYBOARD_HEIGHT ? height : 0;
}
}
Метод подсмотрен на англоязычном SO.
Так вот вопрос: есть ли у кого какие-нибудь предложения как правильней хранить состояние клавиатуры? Булин флаг не устраивает, послкольку проект это фреймворк для тестирования приложений, и програмно клавиатура не всегда открывается/закрывается, т.е. используя свои методы hideKeyBoard/openKeyBoard
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
У меня имеется список с разными количествами монетТипа этого:
Возможно ли как то чтобы в разметке, содержащую ScrollView сделать так чтобы он не пролистывался вниз, дело в том что видимо какой то баг, при переходе...
С консоли нужно считать переменную типа double, затем умножить ее на 6, округлить в меньшую сторону, результат поместить в переменную типа int и вывести...
Нужно реализовать такую фишку: приложение просит выбрать в файлах изображение,с помощью установленных программ (например "Мои файлы"),чтобы...