Подтвердить что ты не робот

SoftKeyboard скрывает EditText

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

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

Я пробовал LinearLayout, RelativeLayout, paddings и различные выравнивания/центрирования, но я до сих пор не могу заставить его работать правильно. 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>
4b9b3361

Ответ 1

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

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

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

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

<activity android:windowSoftInputMode="adjustResize" />

или

<activity android:windowSoftInputMode="adjustPan" />

Дополнительная информация доступна по вышеуказанной ссылке.

Ответ 2

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

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

<activity android:windowSoftInputMode="adjustPan" />

Затем я сделал прокруткуView, о которой я говорю:

<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>

Ответ 3

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

  <activity
        android:windowSoftInputMode="adjustPan">

Ответ 4

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