Вы не должны устанавливать значения layout_width и layout_heights с явными значениями пикселей. Вместо этого используйте wrap_parent или fill_parent в зависимости от ситуации.
Если вы хотите, чтобы текст, например текстовый вид, имел определенную ширину, используйте единицы dpi, которые будут корректно настраиваться на разных разрешениях экрана.
Что касается вашей конкретной проблемы с виртуальной клавиатурой, я бы попробовал настроить ListView, чтобы он занимал оставшееся пространство.
- установить высоту всего, кроме ListView, равным wrap_parent.
- Установите ListView в fill_parent,
ListView должен занимать сколько угодно свободного места и, следовательно, уменьшаться при запросе его изменения размера.