Android — программная клавиатура выталкивает макет моей активности за пределы экрана

Схема моей деятельности показана ниже.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical">

   <FrameLayout android:id="@+id/title_bar"
      android:layout_width="fill_parent"
      android:layout_height="25dip"
      android:background="@drawable/bg_title" />

   <LinearLayout android:id="@+id/main"
      android:width="fill_parent"
      android:layout_height="fill_parent"
      android:layout_weight="1">
         <ListView android:id="@+id/android:list"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
         <TextView android:id="@+id/android:empty"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
      </FrameLayout>
   </LinearLayout>

   <LinearLayout
      android:layout_width="fill_parent"
      android:layout_height="50dip" >
      <EditText android:id="@+id/query"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content" 
         android:hint="Enter some search terms"
         android:singleLine="true" 
         android:layout_weight="1" />
      <Button android:id="@+id/btn_hide"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:background="@drawable/btn_hide"
         android:layout_marginLeft="6dip" />
   </LinearLayout>
 </LinearLayout>

Итак, окно поиска закреплено в нижней части экрана.

Но когда пользователь щелкает EditText, появляется Soft Keyboard и выталкивает макет за пределы экрана, кроме поля поиска.

Я только начинаю работать с Android, так что я делаю что-то не так??


person venkatagiri    schedule 06.11.2010    source источник


Ответы (3)


Попробуйте добавить следующее для вашей активности в манифесте:

android:windowSoftInputMode="adjustPan"
person Asahi    schedule 06.11.2010
comment
Спасибо. Это был тот атрибут, который я искал. Но, поскольку это важно, мне пришлось использовать AdjustResize, чтобы заставить его работать так, как мне нужно. - person venkatagiri; 07.11.2010
comment
Привет, у меня тоже такая же проблема. Но я не могу использовать AdjustResize. потому что у меня есть вкладка внизу. если я использую вкладку изменения размера, она будет перемещена на программную клавиатуру выше. я не хочу, чтобы это произошло. поэтому, если у кого-то есть решение, пожалуйста, помогите мне. - person Raj; 17.04.2012

Для тех, кому интересно, разница между android:windowSoftInputMode="adjustPan" и android:windowSoftInputMode="adjustResize" :

"изменить размер"

Размер окна действия изменен, чтобы освободить место для экранной клавиатуры.

"настроить панораму"

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

Документация по Android

Приведенная ссылка

person Ushal Naidoo    schedule 03.06.2014

@Raj Если вы работаете с приложением с вкладками, вам нужно добавить

android:windowSoftInputMode="adjustPan"

на Activity, где вы добавляете вкладки, это, скорее всего, будет вашей активностью запуска.

Вот фрагмент моего кода

<activity
   android:label="@string/app_name"
   android:name=".MainActivity" android:windowSoftInputMode="adjustPan">
   <intent-filter >
     <action android:name="android.intent.action.MAIN" />
     <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>

person Mushtaq Jameel    schedule 22.06.2012