Intereting Posts
START_STICKY_COMPATIBILITY в услугах Как узнать, продолжаю ли я слушать сокет в Android? Ошибка: не удалось инициализировать класс com.android.ide.common.util.ReadWriteProcessLock после обновления до AS 2.4 Есть ли приложение Android :: onDestroy () для Android? Как избежать автоматической регулировки усиления с помощью AudioRecord? Изменение ориентации экрана во время обезьяны Странное поведение приложения JQuery Mobile Какой Android означает «все возможные типы данных» и как я могу использовать эти данные? Как я могу выровнять меню / значки панели инструментов Android слева, как в приложении «Карты Google»? Проблема обнаружения столкновений на основе пикселов с OpenGLES 2.0 под Android IllegalArgumentException: файл содержит разделитель путей Android Toasts получает сенсорные события на каком-то телефоне, а не на других Длительный клик ListView не работает, когда кнопка находится в списке Как включить информацию о трафике по определенному маршруту в Google Maps V2? Селектор ListView не работает с фоновым набором ListViewItem

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

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

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