我在顶部有一个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>
答案 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中。