Как запретить Soft Keyboard изменять размер фонового изображения - PullRequest
19 голосов
/ 15 марта 2011

У меня есть типичный listview с edittext и кнопкой в ​​нижней части упражнения.

Когда я нажимаю на edittext, появляется программная клавиатура, я могу прокручиватьэлементы в listview, но он изменяет размеры моего фонового изображения.

Я пробовал android:windowSoftInputMode="adjustResize", но без разницы.

Я пробовал android:windowSoftInputMode="adjustPan".Изображение не сдавливается, весь макет смещается вверх, и я теряю строку заголовка.Я могу прокручивать список только в том случае, если элементы списка превышают размер макета.

В основном я хочу сохранить строку заголовка, сохранить фоновое изображение без изменения размера и разрешить прокрутку элементов списка.Кому-нибудь удалось это сделать?Спасибо!

Ответы [ 12 ]

41 голосов
/ 02 мая 2011

для просмотра списка вам нужно использовать

android:isScrollContainer="false"

и добавить это к вашей активности в manifest.xml

android:windowSoftInputMode="adjustPan"
21 голосов
/ 14 мая 2014

Я пытался, так что возможно решения для решения этой проблемы.android: windowSoftInputMode = "AdjustPan" сделает весь ваш экран с помощью клавиатуры.Обычно у нас есть заголовок экрана вверху.Используя этот флаг, он также выйдет за пределы видимой области, что ухудшит восприятие пользователя.Я использую android:windowSoftInputMode="adjustResize" Это изменит размер всего экрана, но вызовет ту же проблему @Maurice state в вопросе.

Итак, вот мое окончательное решение:

In Manifest

android:windowSoftInputMode="adjustResize|stateAlwaysHidden"

В XMl

Не устанавливайте здесь какой-либо фон. И сохраняйте вид в ScrollView

В Java

Вам нужно установить фон окна:

getWindow().setBackgroundDrawableResource(R.drawable.bg_wood) ;
9 голосов
/ 07 декабря 2011

Перейдите на Androidmanifest.xml и:

activity name="activityname" android:windowSoftInputMode="stateVisible|adjustPan"
3 голосов
/ 11 февраля 2016

Используйте android:windowSoftInputMode="adjustResize" и просто оберните свой фоновый ImageView в ScrollView.

<ScrollView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:scrollbars="none"
    android:overScrollMode="never">
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/> 
</ScrollView>
3 голосов
/ 28 апреля 2011

Нет способа предотвратить изменение размера фоновой клавиатуры на программной клавиатуре.

Используйте это 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:id="@+id/RelativeLayoutchat"
  >

  <LinearLayout
    android:orientation="horizontal"
    android:gravity ="clip_horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_centerInParent="true">

   <ImageView
        android:gravity ="clip_horizontal"
        android:id="@+id/chat_bak_img"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:scaleType="matrix">
   </ImageView>

   </LinearLayout>

  <LinearLayout  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical">

  <ListView
        android:id="@+id/chat"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:transcriptMode="alwaysScroll"
        android:divider="#000000"
        android:clickable="false"
        android:layout_weight="9"
        android:cacheColorHint="#00000000"/>



    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_weight="1"
        style="@android:style/ButtonBar"
        android:gravity="center"
        android:paddingLeft="3dip"
        android:paddingTop="3dip"
        android:paddingRight="3dip">
        <EditText
            android:id="@+id/chatMsg"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:maxLines="5"
            android:enabled="true"
            android:textSize="17sp"
            android:maxLength="150"/>
        <Button
            android:id="@+id/sendMsg"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="@string/send_withSpace"
            android:layout_weight="4"/>
    </LinearLayout>

  </LinearLayout>

</RelativeLayout>
1 голос
/ 02 июня 2015

Используйте ImageView с атрибутами fill_parent и centerCrop в RelativeLayout. Как это;

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:src="@drawable/yazisma_arka_plan"
        android:scaleType="centerCrop"
        />
    <ListView
        android:id="@+id/messages_view"
        android:layout_width="fill_parent"...
1 голос
/ 21 мая 2015

У меня та же проблема с изменением размера изображения при отображении клавиатуры, которую я решил с помощью манифеста android: windowSoftInputMode = "AdjustPan" и следующий пример макета в моем случае

т.е.

если есть возможность загружать изображение динамически, вы можете изменить размер изображения с помощью picaaso при загрузке в режиме просмотра изображений

0 голосов
/ 15 июля 2019

Для тех, кто этого не понимает:

двойной ckeck, если у вашего xml уже установлено @drawable (это была ошибка для меня, я настраивал через манифест Android, но он уже был установлен в корне xml )

после этого создайте стиль темы с фоном:

<style name="AppThemeWBackgroundG" parent="AppTheme">
        <item name="android:windowBackground">@drawable/background_com_gradiente</item>
</style>

Тогда в вашей активности на AndroidManifest.xml :

<activity
   android:name=".TelaLoginFuncionario"
   android:windowSoftInputMode="adjustResize|stateAlwaysVisible"
   android:theme="@style/AppThemeWBackgroundG"
    android:fitsSystemWindows="true"
/>

и все: активность отображается на экране с клавиатурой вверх, размер элементов увеличивается, а фон остается обычного размера

0 голосов
/ 14 мая 2019

все, что вам нужно сделать, это установить гравитацию фона наверх

<item android:drawable="@drawable/background_image" android:gravity="top"/>

Вот учебник

0 голосов
/ 31 августа 2018

Этот код не работает для меня:

android:windowSoftInputMode="adjustResize"

Но это работает:

android:windowSoftInputMode="adjustPan"
...