SoftKeyboard скрывается EditText - PullRequest
       20

SoftKeyboard скрывается EditText

20 голосов
/ 13 декабря 2010

У меня есть макет, который использует EditText, чтобы позволить пользователям выполнять поиск в базе данных и заполнять ListView. EditText находится примерно в 2/3 пути от верхней части экрана (расположено над ImageView и сопровождается вводным текстом).

Проблема в том, что программная клавиатура скрывает EditText, поэтому пользователь не может видеть, что он печатает. (Я отключил автоматическое предложение.)

Я пробовал LinearLayout, RelativeLayout, отступы и различные выравнивания / центрирования, но я все еще не могу заставить его работать правильно. EditText либо скрыт, либо отталкивается от верхней части экрана, либо «сдавливается» и искажается.

Предложения ???

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

Другой возможный обходной путь - заставить программную клавиатуру открываться в полноэкранном режиме (хотя не уверен, как) Это по-прежнему будет скрывать EditText, но тогда я могу снова включить автоматическое предложение, чтобы пользователь мог видеть, что он печатает ... вроде ... потому что он может видеть только подсказки для того, что он типирование.

Вот моя последняя попытка. Смотрите "introFrame".

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="wrap_content" 
 android:layout_height="fill_parent"
 android:orientation="vertical">

 <LinearLayout android:id="@+id/titleContainer"
  android:orientation="horizontal" android:layout_width="fill_parent"
  android:layout_height="wrap_content">
  <TextView android:text="@string/title_string"
   android:textSize="15sp" android:textColor="#FFFFFF"
   android:textStyle="bold" android:paddingLeft="5dp"
   android:layout_height="fill_parent" android:layout_width="wrap_content" />
 </LinearLayout>

 <FrameLayout 
 android:id="@+id/introFrame"
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content"
 android:gravity="center_horizontal" >
 <ImageView 
  android:src="@drawable/main_search_image"
  android:scaleType="center"
  android:layout_gravity="center"
  android:layout_height="wrap_content"
  android:layout_width="wrap_content"/>
 <LinearLayout
  android:orientation="vertical"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center"
  android:paddingTop="140dp" >
  <LinearLayout android:id="@+id/introSearchContainer"
   android:orientation="horizontal" 
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_gravity="center_vertical" >
   <LinearLayout 
    android:orientation="horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1" >
    <EditText android:id="@+id/intro_search_box" 
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:hint="     Enter keyword     " 
     android:imeOptions="actionGo"   
     android:inputType="textFilter" 
     android:maxLines="1" />
   </LinearLayout>
   <LinearLayout 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >
    <Button android:id="@+id/intro_search_button" 
     android:background="@drawable/custom_button_go"
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" />
    </LinearLayout>
  </LinearLayout>
  <TextView
   android:text="@string/search_intro"
   android:textSize="15sp"
   android:textColor="#FFFFFF"
   android:layout_height="wrap_content"
   android:layout_width="fill_parent" /> 
 </LinearLayout>
 </FrameLayout>

 <LinearLayout android:id="@+id/listContainer"
  android:orientation="vertical" android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  <ListView android:id="@+id/itemlist" android:layout_width="wrap_content"
   android:layout_height="wrap_content" android:cacheColorHint="#00000000" />
  <TextView android:text="No data found" android:layout_width="fill_parent"
   android:layout_height="fill_parent" android:gravity="center"
   android:textSize="16sp" android:textColor="#FFFFFF" android:id="@+id/android:empty" />
 </LinearLayout>

</LinearLayout>

Ответы [ 4 ]

56 голосов
/ 13 декабря 2010

То, что вы ищете, является атрибутом windowSoftInputMode действия. Вы устанавливаете это в своем файле AndroidManifest.xml и присваиваете ему значение, такое как:

  • adjustResize: «Главное окно действия всегда изменяется, чтобы освободить место для экранной клавиатуры на экране».

  • adjustPan: "Главное окно действия не изменено, чтобы освободить место для виртуальной клавиатуры. Скорее, содержимое окна автоматически панорамируется, так что текущий фокус никогда не скрывается клавиатурой, и пользователи всегда могут видеть, что они набирают текст. Как правило, это менее желательно, чем изменение размера, поскольку пользователю может потребоваться закрыть экранную клавиатуру, чтобы получить доступ к скрытым частям окна и взаимодействовать с ними. "

AdjustResize, вероятно, будет работать для вас, если вы оберните макет в ScrollView. Это может иметь негативные последствия, если у вас есть растровое изображение на заднем плане, так как оно также будет изменено, и в этом случае вы можете использовать вместо него AdjustPan.

<activity android:windowSoftInputMode="adjustResize" />

или

<activity android:windowSoftInputMode="adjustPan" />

Более подробная информация доступна по ссылке выше.

13 голосов
/ 05 января 2012

Что сработало для меня, так это добавление моего LinearLayout самого высокого уровня в scrollView (ScrollView может иметь только одного дочернего элемента).Это позволило всей деятельности / форме прокручиваться вверх и не загромождать EditText в фокусе.

Сначала я установил в своей деятельности:

<activity android:windowSoftInputMode="adjustPan" />

Затем я сделал ScrollView.говорить о:

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

    <!-- STUFF -->

  </LinearLayout>
</ScrollView>
2 голосов
/ 01 июня 2016

просто используйте в манифесте следующее ...

  <activity
        android:windowSoftInputMode="adjustPan">
1 голос
/ 13 декабря 2010

попробуйте дать редактируемому тексту layout_weight (т. Е. Layout_weight = 1), это может иметь некоторые другие эффекты для других элементов макета, с которыми вам, возможно, придется работать, но это может помочь ему оставаться видимым, когда всплывающая программная клавиатура

...