我在顶部有一个RelativeLayout,然后在下面有一个ListView,最后在底部有一个relativeLayout,里面有一个EditText和一个Button。
当我单击EditText并出现IME(虚拟键盘)时,我希望ListView调整大小。如果我在清单中放入adjustResize,则将调整Listview的大小以为IME留出空间,但是IME覆盖了下面带有EditText的RelativeLayout,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>
您不应该使用显式像素值设置layout_width和layout_heights。而是根据需要使用wrap_parent或fill_parent。
如果要使像文本视图这样的东西具有特定的宽度,请使用可在不同屏幕分辨率下正确调整的dpi单位。
关于您的特定虚拟键盘问题,我将尝试设置ListView,以使其占用剩余空间。
-将ListView以外的所有东西的高度设置为wrap_parent-将ListView设置为fill_parent,
ListView应该占用很多可用空间,因此当您要求它调整大小时会缩小。
我遇到了同样的问题,并且找到了解决方案。就我而言,在Manifeste.xml中,我声明了minSdkVersion = 3(Android 1.5),并且我的项目是使用Android 2.2(SDK 8)编译的,从理论上讲,它应该可以工作...但是不行!我将minsdkVersion修改为4(Android 1.6),就可以了。这只是不同的Android SDK之间的兼容问题。祝你好运。
[如果您有机会使用此:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
这可能会导致问题。我最初添加该行是为了解决状态栏将应用程序向下推动的错误……但是这也阻止了键盘将应用程序向上推动。
叹息
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>
这将使应用程序将焦点放在编辑文本上,并将其调整为在屏幕上聚焦!它也可以在片段内部工作!
如果键盘覆盖了EditText字段,请使用以下代码:
EditText= findViewById(R.id.edittext)
EditText?.getParent()?.requestChildFocus(EditText,EditText)
如果要使Cursor在焦点编辑文本中,而不是使用EditText.requestFocus()
之后 EditText?.getParent()?.requestChildFocus(EditText,EditText)
,它有助于在焦点编辑文本中获得焦点和光标。