显示软键盘时,Scrollview不会缩小

时间:2014-10-06 17:34:01

标签: android android-layout android-scrollview

我有一个简单的聊天活动,顶部有一个消息输入框,然后是带有消息列表的滚动视图。当打开软键盘时,我希望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解决方案,但是它不起作用,当我触发键盘时,布局没有改变,键盘覆盖了最后的消息。我怎么能避免这个? 谢谢你的帮助!

1 个答案:

答案 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());

        }
    });