我正在尝试创建一个非常基本的聊天屏幕,其中ListView显示文本,底部是EditText,EditText右侧是“发送”按钮。一切都很实用,但当我点击EditText时,虚拟键盘会覆盖它。屏幕平移一点但不足以在键盘上方可见。我的清单中有“adjustPan”标签,并且还尝试了“adjustResize”标签无效。我猜这与我的布局设置方式有关,但老实说我没有任何线索。请帮忙!
当前布局......
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ListView android:id="@+id/android:list"
android:layout_height="0dip"
android:layout_width="fill_parent"
android:layout_weight="1"
android:stackFromBottom="true">
</ListView>
<LinearLayout android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<EditText android:id="@+id/sendMessageBox"
android:focusable="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:scrollbars="vertical"
android:maxLines="4"
android:text=""
android:inputType="textShortMessage|textAutoCorrect|textCapSentences|textMultiLine"
android:maxLength="1000"
android:hint="Type your message..."
android:imeOptions="actionSend"/>
<Button android:id="@+id/sendMessageButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:text="Send"/>
</LinearLayout>
答案 0 :(得分:49)
经过大量搜索后,显然这就是我所说的错误。如果使用全屏标记(从活动中删除状态栏),则不能使用“adjustResize”而不将活动包装在ScrollView中。不幸的是,我正在使用ListView,这将产生另一个问题。我厌倦了搞乱它,可能只是放弃了那个活动的全屏。
答案 1 :(得分:29)
在清单文件中,您需要设置适当的android:windowSoftInputMode
属性。此属性自API 3起有效。
<activity
...
android:windowSoftInputMode="adjustPan" >
</activity>
选项包括:http://developer.android.com/guide/topics/manifest/activity-element.html#wsoft
答案 2 :(得分:9)
如果为清单中的活动设置android:windowSoftInputMode="adjustResize"
,则ScrollView(或其他可折叠的ViewGroups)将缩小以容纳软键盘。但是,如果在活动的主题中设置android:windowFullscreen="true"
,则ScrollView不会缩小,因为它被强制填满整个屏幕。但是,在主题中设置android:fitsSystemWindows="false"
也会导致adjustResize无法正常工作
答案 3 :(得分:1)
我在AndroidManifest中有这个。它导致adjustPan
停止正常工作。我删除了下面的块,一切正常。
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="false"
android:anyDensity="false" />
答案 4 :(得分:0)
这是我找到的一种解决方法。打开有问题的editText并按RETURN键。请注意,它会将editText移动到您正在拍摄的位置附近。
因此,虽然hacky,但你可以在edittext的顶部取一个新行。
这似乎也可以在底部使用换行符,但是在软键盘动画到位后,你必须使用延迟来不添加换行符。
注意我在某些手机上只有这个问题(DroidX)。
if (android.os.Build.MODEL.equals("DROIDX")) {
inputEt.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
String text = inputEt.getText().toString();
text = "\n\n" + text.trim();
inputEt.setText(text);
inputEt.setSelection(text.length());
}
});
}
答案 5 :(得分:0)
尝试在清单中添加android:windowSoftInputMode="adjustResize|stateVisible|stateAlwaysHidden"
。
答案 6 :(得分:-13)
您可以尝试以下设置:
<supports-screens
android:anyDensity="true"/>