如何防止键盘隐藏我的EditText?

时间:2010-08-13 15:56:36

标签: android keyboard android-edittext

我在顶部有一个RelativeLayout,然后在下面我有一个ListView在中心,最后在底部我有另一个relativeLayout,里面有一个EditText和一个Button。

当我点击EditText并显示IME(虚拟键盘)时,我希望ListView调整大小。如果我在清单中放入adjustResize,则会调整Listview的大小以便为IME留出空间,但是IME会覆盖下面带有EditText的RelativeLayout,我无法看到我正在编写的内容。如果我把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>

5 个答案:

答案 0 :(得分:2)

您不应该使用显式像素值设置layout_width和layout_heights。相反,请根据需要使用wrap_parent或fill_parent。

如果您希望像文本视图一样的某些特定宽度,请使用dpi单位,这些单位将在不同的屏幕分辨率下正确调整。

关于您的特定虚拟键盘问题,我会尝试设置ListView,以便占用剩余空间。

- 将除ListView之外的所有内容的高度设置为wrap_parent - 将ListView设置为fill_parent,

ListView应该占用很多空间,因此当你要求它调整大小时会缩小。

答案 1 :(得分:2)

我有同样的问题,我找到了解决方案。 在我的例子中,在Manifeste.xml中,我声明了一个minSdkVersion = 3(Android 1.5),我的项目是用Android 2.2(SDK 8)编译的。理论上它应该可以工作......但不是! 我将minsdkVersion修改为4(Android 1.6),然后就可以了。 这只是不同Android SDK之间的兼容问题。 祝你好运。

答案 2 :(得分:2)

如果你有任何机会使用它:

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

这可能会导致问题。我最初添加该行来修复状态栏向下推动应用程序的错误...但它也阻止键盘向上推动应用程序。

叹息。

答案 3 :(得分:1)

你可以像这样添加一个滚动视图:

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

..........


</ScrollView>

这会导致应用关注编辑文本并将其调整为焦点在屏幕上!它也适用于碎片!

答案 4 :(得分:0)

如果键盘覆盖了EditText字段,请使用以下代码:

EditText= findViewById(R.id.edittext)
EditText?.getParent()?.requestChildFocus(EditText,EditText)

如果您希望将 Cursor 放在Focused EditText中,而不是在EditText.requestFocus()之后使用EditText?.getParent()?.requestChildFocus(EditText,EditText) ,这有助于获得焦点和光标在Focused EditText中。