Android не предоставляет API для проверки, видна ли клавиатура или нет. Однако вы можете отключить высоту макета верхнего уровня, чтобы определить эту информацию.
Во-первых, вы должны установить для атрибута android: windowSoftInputMode своей активности значение «AdjustResize».
Затем создайте новый класс, который расширяет желаемый тип макета (например, LinearLayout). В этом классе вы можете переопределить несколько различных методов, которые будут вызываться при изменении высоты макета (из-за того, что клавиатура отображается или скрыта). Когда эти вызовы инициированы, вы можете сравнить высоту вашего макета с высотой экрана. Если между ними есть существенная разница (т. Е. Больше, чем просто размер панели уведомлений), клавиатура видна.
Наконец, убедитесь, что вы используете новый класс в качестве макета верхнего уровня в XML-макете (например, вместо LinearLayout).
Если вы хотите более подробное объяснение, я написал его: http://www.cannedcoding.com/2011/08/soft-keyboard.html