Я не могу прокомментировать ваш ответ, но я бы хотел кое-что добавить.
Я понимаю вашу дилемму, и почему решение, с которым вы связались, не является полным решением для вашей ситуации (поскольку вы не можете прокрутить до конца представления). У меня похожая ситуация с большим прокручиваемым полем EditText. Когда всплывающая программная клавиатура всплывает, мне не нравится, когда мой фон становится сплющенным.
Я испробовал ваше решение, и, на первый взгляд, оно работает, но в некоторых ситуациях оно может быть не идеальным:
- Если вы разрешите приложению работать в ландшафтном режиме, фон не изменится / растянется
- Если вы запустите свое приложение на устройстве с большим экраном или разрешением dpi, фон может не заполнить экран
В основном кажется, что когда вы устанавливаете scaleType
на matrix
, вы говорите Android рисовать фон 1: 1, а не масштабироваться. Итак, что происходит, когда вы открываете программную клавиатуру с помощью своего решения, ваши scrollView
и imageView
все меняются в обычном режиме, но установленное вами изображение src остается 1: 1, таким образом, продолжает отображать ту же область.
Так, если, например, для вашего фонового изображения был задан определенный размер (например, 480 x 800), и он идеально заполняет ваш Nexus One, в тот момент, когда вы поворачиваетесь в ландшафт, у вас будет черная область справа.
Это, конечно, спорный вопрос, если ваш фон представляет собой просто повторяющийся узор, и в этом случае вы можете сделать его очень большим и, будем надеяться, компенсировать различные экраны (возможно, даже планшеты).
Или вы также можете предоставить различные фоны для разных размеров экрана / плотности / ориентации, но это по-прежнему не учитывает масштабирование.
В тщетных попытках решить эту проблему, я наткнулся на атрибут View
, называемый android:isScrollContainer
. Этот атрибут сообщает определенным представлениям, разрешено ли им изменять размер при отображении программной клавиатуры. Это также упоминается кем-то в вашем связанном решении. Я попытался установить это значение (false) на ViewGroup
, содержащем мой фон, но любой дочерний элемент, который прокручивается, кажется, переопределяет его, вызывая хлюпание снова.
На данный момент я не думаю, что есть полное решение для нашей ситуации. Вы определенно работаете в некоторых случаях, и я благодарю вас за усилия. Надеюсь, что Google предложит решение в будущем, но я не думаю, что они сочли бы это проблемой / приоритетом.