我有一个简单的聊天活动,顶部有一个消息输入框,然后是带有消息列表的滚动视图。当打开软键盘时,我希望scrollview缩小,以便键盘不会覆盖最后一条消息。这是我的xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="8dp" >
<TextView
android:id="@+id/chat_with"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="Chat with Gordon" />
<RelativeLayout
android:id="@+id/msg_container"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/chat_with"
android:layout_marginTop="10dp">
<EditText
android:id="@+id/chat_message"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Type your message" />
<ImageButton
android:id="@+id/chat_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:background="#00000000"
android:src="@+android:drawable/ic_menu_send" />
</RelativeLayout>
<ScrollView
android:id="@+id/chat_container"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/msg_container"
android:layout_marginTop="15dp"
android:padding="10dp"
android:isScrollContainer="true"
>
<RelativeLayout
android:id="@+id/chat_text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<TextView
android:id="@+id/msg1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hi, how are you?"
android:layout_alignParentRight="true"/>
<TextView
android:id="@+id/msg2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="hey! All right"
android:layout_alignParentLeft="true"
android:layout_below="@+id/msg1"/>
</RelativeLayout>
</ScrollView>
</RelativeLayout>
我只是手动插入两条消息,但实际应用中会有很多消息。我已经尝试过adjustPan | adjustResize解决方案,但是它不起作用,当我触发键盘时,布局没有改变,键盘覆盖了最后的消息。我怎么能避免这个? 谢谢你的帮助!
答案 0 :(得分:1)
我通过使用清单解决了这个问题。在我使用的活动中:
android:windowSoftInputMode="stateHidden|adjustResize"
这样键盘就会隐藏起来,然后当用户点击EditText时,键盘会显示出来,屏幕的其余部分会调整大小。
查看windowSoftInputMode以获取键盘行为的其他设置(例如,只是屏蔽屏幕而不是调整大小)。
编辑: 在键盘显示后将滚动视图滚动到底部我需要稍微延迟,因为有时滚动会先发生然后键盘出现而滚动视图不再在底部。我最后因为其他原因没有保留这个,但是延迟滚动有点可以做到这一点:
// now scroll to the bottom
ScrollView sv = (ScrollView) findViewById(R.id.myScrollView);
sv.post(new Runnable() {
@Override
public void run() {
ScrollView sv = (ScrollView) findViewById(R.id.myScrollView);
sv.scrollTo(0, sv.getBottom());
}
});