Как предотвратить, чтобы клавиатура скрывала мой EditText? - PullRequest
3 голосов
/ 13 августа 2010

У меня есть RelativeLayout вверху, затем внизу у меня есть ListView в центре и, наконец, внизу, у меня есть другой родственникLayout с EditText и кнопкой внутри.

Я хочу изменить размер ListView, когда я нажимаю на EditText и появляется IME (виртуальная клавиатура). Если я поместил AdjustResize в манифест, ListView изменяется, чтобы оставить пространство для IME, но RelativeLayout с EditText, который находится ниже, покрывается IME, и я не вижу, что я пишу. Если я поставлю AdjustPan, клавиатура все нажимает вверх, ListView не изменяется, и я теряю верхний RelativeLayout.

Мой код:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/application_background"
    android:paddingLeft="15px"
    android:paddingRight="15px"
    android:paddingTop="15px"
    android:paddingBottom="15px">

    <RelativeLayout
        android:id="@+id/rlyParentPost"
        android:orientation="vertical"
        android:layout_width="450px"
        android:layout_height="85px"
        android:background="@drawable/app_gradient_color"
        android:layout_centerHorizontal="true">
        <ImageView
            android:id="@+id/imgUserOfParent"
            android:layout_marginLeft="10px"
            android:layout_marginTop="10px"
            android:background="@drawable/userfeed"
            android:layout_width="64px"
            android:layout_height="64px"
            android:layout_below="@+id/logoImg">
        </ImageView>
        <TextView
            android:layout_below="@+id/logoImg"
            android:layout_toRightOf="@+id/imgUserOfParent"
            android:id="@+id/lblNameOfParent"
            android:textSize="17px"
            android:textStyle="bold"
            android:layout_marginLeft="5dip"
            android:layout_marginTop="11dip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#ffffff">
        </TextView>
        <TextView
            android:layout_below="@+id/lblNameOfParent"
            android:layout_toRightOf="@+id/imgUserOfParent"
            android:id="@+id/lblBodyOfParent"
            android:textColor="#ffffff"
            android:textSize="17px"
            android:layout_marginLeft="5dip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
        </TextView>
        <TextView
            android:layout_below="@+id/lblBodyOfParent"
            android:layout_toRightOf="@+id/imgUserOfParent"
            android:id="@+id/lblDateOfParent"
            android:textColor="#70ccff"
            android:textSize="11px"
            android:layout_marginLeft="7dip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
        </TextView>
    </RelativeLayout>

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/rlyParentPost"
        android:id="@+id/contentLayout">

     <ListView
       android:isScrollContainer="true"
         android:id="@+id/lsvComments"
         android:layout_height="515px"
         android:layout_width="450px"
         android:background="#ffffff"
         android:listSelector="@drawable/multi_white_color"
         android:drawSelectorOnTop="false"
         android:divider="#9aa5ac"
         android:cacheColorHint="#00000000"
         android:dividerHeight="1px">
     </ListView>

     <RelativeLayout
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:padding="5dip"
         android:layout_below="@+id/lsvComments"
         android:background="@drawable/app_gradient_comments"
         android:id="@+id/contentLayout">
         <EditText
             android:inputType="text"
             android:id="@+id/txtComment"
             android:hint="What are you working on?" 
             android:textSize="22px"
             android:layout_marginLeft="8px"
             android:layout_height="72px"
             android:layout_width="344px">
         </EditText>
         <Button
             android:layout_toRightOf="@+id/txtComment"
             android:id="@+id/cmdShare"
             android:layout_width="79px"
             android:layout_height="65px"
             android:background="@drawable/feed_comments_multi_stage"
             android:layout_marginLeft="7px">
         </Button>
    </RelativeLayout> 
   </RelativeLayout>
</RelativeLayout>

Ответы [ 4 ]

2 голосов
/ 22 декабря 2010

У меня была такая же проблема, и я нашел решение. В моем случае в файле Manifeste.xml я объявил minSdkVersion = 3 (Android 1.5), и мой проект был скомпилирован с Android 2.2 (SDK 8). По идее, он должен работать ... но не! Я изменил minsdkVersion до 4 (Android 1.6), тогда все в порядке. Это была просто проблема совместимости между различными Android SDK. Удачи тебе.

2 голосов
/ 20 января 2011

, если вы случайно используете это:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

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

Вздох.

2 голосов
/ 13 августа 2010

Вы не должны устанавливать значения layout_width и layout_heights с явными значениями пикселей. Вместо этого используйте wrap_parent или fill_parent в зависимости от ситуации.

Если вы хотите, чтобы текст, например текстовый вид, имел определенную ширину, используйте единицы dpi, которые будут корректно настраиваться на разных разрешениях экрана.

Что касается вашей конкретной проблемы с виртуальной клавиатурой, я бы попробовал настроить ListView, чтобы он занимал оставшееся пространство.

- установить высоту всего, кроме ListView, равным wrap_parent. - Установите ListView в fill_parent,

ListView должен занимать сколько угодно свободного места и, следовательно, уменьшаться при запросе его изменения размера.

1 голос
/ 12 февраля 2014

U можете добавить вид прокрутки следующим образом:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:fillViewport="true">

..........


</ScrollView>

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

...