Intereting Posts
Android автоматически завершается только после пробела? Служба Android, взаимодействующая с несколькими действиями Android: Как отображать большой анимированный gif с учетом URL-адреса? Код кода API Bluetooth OBD-II не работает Функция прокрутки меню навигационного ящика Производительность Android – «Избегайте внутренних Getters / Setters» Самый простой способ отладить сбой в родной библиотеке, связанный с Android-приложением? Google Pick Picker (JavaScript) не поддерживает мобильный / отзывчивый Переход общего элемента Android: просмотр героя обращается перед другим Android поддерживает все планшеты – классифицирует чертежи и макеты Android – Как вызвать широковещательный приемник для вызова метода onReceive ()? Как используются значения android.graphics.Matrix? Автоматическое увеличение значения в Firebase Facebook login Не удается передать разрешение на публикацию или управление (электронное письмо) на запрос авторизации на чтение Эквивалентно push () или pop () для массивов?

Как сохранить размер фонового изображения при показе программной клавиатуры

Когда отображается программная клавиатура, она меняет размер моего макета и, таким образом, сжимает фоновое изображение вместе. Мой вопрос в основном является дубликатом этого вопроса, который объясняется очень хорошим образом:

Программная клавиатура изменяет размер фонового изображения на Android

Однако этот вопрос был закрыт, когда они нашли взломать его решение. Я не могу использовать этот хак. Весь мой макет находится внутри ScrollView, и мне нужно иметь возможность использовать этот режим прокрутки правильно в любое время. Используя android: windowSoftInputMode = «stateVisible | adjustPan», пользователь не сможет прокручивать вниз и видеть нижнюю часть экрана во время показа клавиатуры, поскольку макет будет частично существовать за клавиатурой. Таким образом, решение для меня неприемлемо. Есть ли там лучшие решения?

Ура,

Solutions Collecting From Web of "Как сохранить размер фонового изображения при показе программной клавиатуры"

Я на самом деле столкнулся с подобной проблемой не так давно. Однако я наткнулся на правильный ответ с небольшой работой.

В вашем манифесте для Android для этого проекта, привязанного к определенному действию, которое вы используете, используйте строку android:windowSoftInputMode="adjustPan|stateVisible" в теге активности.

adjustPan основном означает, что ваша активность не будет изменяться сама по себе, чтобы соответствовать мягкой клавиатуре, а stateVisible означает, что мягкая клавиатура будет отображаться по запросу (это может быть stateAlwaysVisible и т. Д., Если это необходимо)

Источник: Android Dev для тегов активности

После нескольких дней хардкорного взлома мне наконец удалось создать такое усовершенствованное решение, что, возможно, было бы больно его прочитать. Я размещаю ImageView с фоном позади scrollview и устанавливаю scaleType = "matrix", чтобы он не уменьшался при отображении клавиатуры.

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@color/black" > <ImageView android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/mah_kewl_background" android:scaleType="matrix" /> <ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent" android:fillViewport="true" > <RelativeLayout android:id="@+id/smsLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="PLUNX" /> </RelativeLayout> </ScrollView> </RelativeLayout> 

Вы можете использовать свойство windowBackground, что делает пригодным для рисования весь экран. Для этого вам необходимо:

1- Создать стиль:

 <style name="Background" parent="@android:style/Theme.NoTitleBar"> <item name="android:windowBackground">@drawable/you_bg_drawable</item> </style> 

2- Установите стиль своей деятельности в AndroidManifest.xml

 <activity android:name=".ui.your_activity" android:theme="@style/Background"/> 

Я искал решение этой проблемы, когда столкнулся с этим, и после нескольких исследований я нашел решение, которое, я думаю, немного лучше. Вместо взлома с помощью ImageView вы можете использовать это из своей деятельности:

  getWindow().setBackgroundDrawableResource(R.drawable.bg_my_background); 

Надеюсь, что это поможет кому-либо еще найти решение для этого.

В Androidmanifest в использовании тега активности:

 <activity ... android:windowSoftInputMode="adjustPan" ></activity> 

Проверить ссылку разработчика Android

Я не могу прокомментировать ваш ответ, но я хотел бы что-то добавить.

Я понимаю вашу дилемму и почему решение, с которым вы связаны, не является полным решением для вашей ситуации (поскольку вы не можете прокручивать нижнюю часть представления). У меня аналогичная ситуация с большим прокручиваемым полем EditText. Когда появляется мягкая клавиатура, мне не нравится, как мой фон сжимается.

Я попробовал ваше решение, и, хотя на первый взгляд он работает, есть ситуации, когда это может быть не идеальным:

  1. Если вы позволяете вашему приложению иметь ландшафтный режим, фон не будет изменять размер / растягивать
  2. Если вы запустите приложение на устройстве с большим экраном или dpi, ваш фон может не заполнить экран

В принципе, кажется, что когда вы устанавливаете scaleType в matrix вы говорите Android, чтобы рисовать фон 1: 1, а не масштабировать. Итак, что происходит, когда вы открываете мягкую клавиатуру с помощью своего решения, ваши scrollView и imageView все scrollView как обычно, но изображение src, которое вы установили, остается 1: 1, таким образом, продолжает показывать ту же область.

Так, если, например, ваше фоновое изображение было настроено на определенный размер (например, 480 x 800), и он отлично заполняет ваш Nexus One, как только вы вращаетесь в альбом, у вас будет черная область справа.

Это спорный вопрос, конечно, если ваш фон просто повторяющийся узор, в этом случае вы можете сделать это очень большой, и мы надеемся компенсировать различные экраны (может быть, даже таблетки).

Или вы также можете предоставить разные фоны для разных размеров экрана / плотности / ориентации, но это все еще не учитывает масштабирование.

В тщетной попытке решить эту проблему я наткнулся на атрибут View называемый android:isScrollContainer . Этот атрибут сообщает определенным представлениям, разрешено ли им изменять размер при отображении мягкой клавиатуры. Это также упоминается кем-то в вашем связанном решении. Я попытался установить это (на false) в ViewGroup содержащем мой фон, но любой дочерний элемент, который прокручивается, кажется, переопределяет его, что снова вызывает скрежет.

На данный момент я не думаю, что есть полное решение для нашей ситуации. В некоторых случаях вы определенно работаете, и я благодарю вас за эти усилия. Надеюсь, Google предложит решение в будущем, но я не думаю, что они считают это проблемой / приоритетом.

Возможно, есть другое (очень простое!) Решение: В styles.xml: создайте новый стиль следующим образом: <style name="Yourstyle" parent="AppBaseTheme"> <item name="android:windowBackground">@drawable/mybackground</item> </style>
AppBaseTheme – это обычно используемая тема для вашего приложения. Затем вы добавляете в Manifest.xml: <activity android:name="com.your.app.name.Activity" android:theme="@style/Yourstyle"> </activity> Таким образом, у вас есть тот же стиль, но с фоном , Важно: не устанавливайте фоны в вашем обычном XML-файле! Это мой первый пост, и я надеюсь, что это поможет и извините за мой английский.

Как насчет решения, где «фон» – это макет. Можем ли мы раздуть макет, сделать его размером всего окна, а затем вставить его в качестве фона окна?

После долгих поисков …

Поместите android:windowSoftInputMode="adjustPan|stateVisible" в каждой Деятельности