仿微信 QQ聊天界面,弹出软键盘,listview上移,标题不动

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ym4189/article/details/79568820

转载请注明出处:http://blog.csdn.net/ym4189/article/details/79568820

完美解决聊天布局 顶部title固定,底部是EditText,中间是ListView,弹出软键盘,ListView上移,标题不动

1.布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/bg_huise"
    android:orientation="vertical">

    <include layout="@layout/xhd_item_actionbar" />
    <!-- 标题栏布局 -->

    <RelativeLayout
        android:id="@+id/relative_parent"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/xhdItem_actionbar"
        android:background="@color/bg_huise"
        android:orientation="vertical">

        <FrameLayout
            android:id="@+id/frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_above="@+id/chat_bottom">

            <ListView
                android:id="@+id/rlv_chats"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:cacheColorHint="@color/transparent"
                android:divider="@color/transparent"
                android:dividerHeight="10dp"
                android:fadingEdge="none"
                android:listSelector="@color/transparent"
                android:scrollbars="none"
                android:stackFromBottom="true"
                android:transcriptMode="alwaysScroll" />
        </FrameLayout>

        <LinearLayout
            android:id="@+id/chat_bottom"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:orientation="vertical">

            <View
                android:layout_width="match_parent"
                android:layout_height="0.5dp"
                android:background="@color/new_background" />

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:gravity="center_vertical"
                android:minHeight="50dp">

                <ImageView
                    android:id="@+id/iv_cut"
                    android:layout_width="35dp"
                    android:layout_height="wrap_content"
                    android:layout_centerVertical="true"
                    android:layout_marginLeft="15dp"
                    android:clickable="true"
                    android:onClick="OnButtonClick"
                    android:scaleType="centerInside"
                    android:src="@drawable/chat_input_icon_voice" />

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_toLeftOf="@+id/img_send"
                    android:layout_toRightOf="@+id/iv_cut"
                    android:gravity="center"
                    android:orientation="vertical"
                    android:padding="5dp">

                    <EditText
                        android:id="@+id/et_common_edit"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:background="@drawable/bg_radius_white_5dp"
                        android:clickable="true"
                        android:hint="请输入内容"
                        android:inputType="textMultiLine"
                        android:maxLines="3"
                        android:minHeight="40dp"
                        android:onClick="OnButtonClick"
                        android:padding="5dp"
                        android:textSize="18sp"
                        android:visibility="visible" />

                </LinearLayout>


                <ImageView
                    android:id="@+id/img_send"
                    android:layout_width="35dp"
                    android:layout_height="wrap_content"
                    android:layout_alignParentRight="true"
                    android:layout_centerVertical="true"
                    android:layout_marginRight="15dp"
                    android:clickable="true"
                    android:onClick="OnButtonClick"
                    android:scaleType="centerInside"
                    android:src="@drawable/chat_input_icon_sent" />
            </RelativeLayout>

        </LinearLayout>
    </RelativeLayout>

</RelativeLayout>

布局还是很简单,顶部是标题栏,中间是listview,底部是输入框。
这里介绍下listview的两个属性:

android:stackFromBottom=”true”

stackFromBottom=”false”: 从上到下依次填充listview

stackFromBottom=”true”: 从下到上一次填充listvew

android:transcriptMode=”alwaysScroll”
transcriptMode
disabled : 默认的,transcriptMode不可用。
normal : 当数据变化,并且,最后一条可见的时候,会自动滚动到底部。
alwaysScroll : 数据变化,就会滚动到底部。

2.在manifet配置Activity的键盘模式

android:windowSoftInputMode="stateHidden|adjustResize"

3.activity不能使用沉浸状态栏
但是,有时候为了美观,必须使用沉浸状态栏时,可以有折中办法,就是单独将状态栏颜色设置为和标题栏颜色相近的颜色。

ps:
对于使用RecyclerView的来说,影响不大,只是要改变下item的显示方式就好,大概就是

linearLayoutManager.setStackFromEnd(true); 

最后聊天多半会有表情框,在表情框和输入法之间切换的问题可以查看另一篇文章:

解决聊天页面输入法和表情面板切换界面闪动问题

好了,以上基本可以满足需求,如有疑问,欢迎多多交流!!!

猜你喜欢

转载自blog.csdn.net/ym4189/article/details/79568820