转载请注明出处:http://blog.youkuaiyun.com/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);
最后聊天多半会有表情框,在表情框和输入法之间切换的问题可以查看另一篇文章:
好了,以上基本可以满足需求,如有疑问,欢迎多多交流!!!