Intereting Posts
IllegalArgumentException: столбец «_id» не существует при вызове SimpleCursorAdaptor Предупреждение о достоверности Как получить день, год, часы, мин. Индивидуально от формата даты «yyyy-MM-dd'T'HH: mm: ss.SSSZ»? Как часто вы можете обновлять текст без беспорядка Google Analytics для Android: не см. Отчет о демографических данных и интересах Как объединить данные из двух отдельных таблиц в один курсор? Android: добавьте просмотр с анимацией расширения (без мигания) Google Analytics – отображение значений событий на ярлыке события Реагирует ли исходный кеш удаленных изображений? Принудительное объявление YouTube для показа Мгновенный запуск Android studio 2.2 Я никогда не получаю hotswap всегда перезапускать и изменение типа поля уведомления Как запустить AccessibilityService? Как предоставить настраиваемый цвет текста для одного элемента меню в NavigationView? Android WebView HTML5 Video Spawns MediaPlayer, который вечно живет на Samsung S4 Добавление новых маркеров на карту с помощью ящика кластера не отражает изменений до тех пор, пока я не увеличу масштаб и не уменьшу карту

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

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

Программная клавиатура изменяет размер фонового изображения на 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" в каждой Деятельности