android朋友圈評論功能相容沉浸式狀態列,九宮格圖片顯示
android朋友圈評論功能,沉浸式狀態列,九宮格圖片顯示器,上拉載入下拉重新整理功能,可直接用到專案中
背景
在前兩個專案開發過程中用到了朋友圈這個功能,包含了評論回覆、九宮格圖片及大圖展示展示,上拉載入下拉重新整理,RecyclerView和第三方封裝的萬能介面卡,自己根據使用情況,做了一下總結,功能有:
- 評論功能,沉浸式與軟鍵盤評論框佈局的完美顯示,評論佈局緊貼item下方顯示
- 九宮格圖片展示採用第三方 BGAPhotoPicker-Android
- RecyclerView與第三方萬能介面卡 BaseRecyclerViewAdapterHelper
- retrofit2與rxjava封裝請求資料
- 表情與字串間的轉換
效果圖
朋友圈評論回覆功能
評論佈局採用NoTouchLinearLayout:
/**
* 可以監聽返回鍵點選事件的LinearLayout(解決了第一次點選返回按鈕只隱藏鍵盤的問題)
*/
public class NoTouchLinearLayout extends LinearLayout { public NoTouchLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public NoTouchLinearLayout(Context context, AttributeSet attrs) { super(context, attrs); } public NoTouchLinearLayout(Context context) { super(context); } private OnResizeListener mListener; public interface OnResizeListener { void OnResize(); } public void setOnResizeListener(OnResizeListener l) { mListener = l; } @Override public boolean onTouchEvent(MotionEvent event) { return true; } //返回鍵監聽,點選返回按鈕,鍵盤和該佈局同時隱藏(解決了第一次點選返回按鈕只隱藏鍵盤的問題) @Override public boolean dispatchKeyEventPreIme(KeyEvent event) { if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) { mListener.OnResize(); return true; } return super.dispatchKeyEventPreIme(event); } }
評論列表採用IRecyclerView:
繼承自RecyclerView,作用是:在mainfest裡設定 Android:windowSoftInputMode=”adjustResize”,軟體盤彈出隱藏時改變佈局的大小,即onSizeChanged()方法會被呼叫。用來監聽RecyclerView佈局改變,控制評論佈局的顯示與隱藏
public class IRecyclerView extends RecyclerView {
public interface OnSizeChangedListener { public void onSizeChanged(); } private OnSizeChangedListener onSizeChangedListener; public void setOnSizeChangedListener(OnSizeChangedListener onSizeChangedListener) { this.onSizeChangedListener = onSizeChangedListener; } public IRecyclerView(Context context) { super(context); } public IRecyclerView(Context context, AttributeSet attrs) { super(context, attrs); } public IRecyclerView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); if (onSizeChangedListener != null) { onSizeChangedListener.onSizeChanged(); } } }
點選item的評論圖示時 記錄item的位置級父佈局的高度,用來確定鍵盤彈出時,RecyclerView停留的位置,使評論佈局剛好顯示在當前item下方:
helper.setOnClickListener(R.id.CommentImageView, new View.OnClickListener() {
@Override
public void onClick(View view) {
//獲取點選的那個Item的高度
position = helper.getPosition();//記錄點選的位置
isReply = false;
mCommentEditText.setHint("評論" + item.getUser().getNickName() + ":");
viewHeight = ((View) view.getParent().getParent()).getHeight();//獲取當前View父佈局的父佈局高度
showCommentLayout();
}
});
佈局大小變動後,設定RecyclerViewList要滑動停留的位置
//佈局大小變動後,執行的方法
@Override
public void onSizeChanged() {
linearLayoutManager.scrollToPositionWithOffset(position, mRecyclerViewList.getBottom() - viewHeight);//計算鍵盤彈出時 mRecyclerViewList要滑動停留的位置
}
其中要實現的介面
public class CricleFragemnt extends BaseFragment implements IRecyclerView.OnSizeChangedListener, BaseQuickAdapter.RequestLoadMoreListener, SwipeRefreshLayout.OnRefreshListener,
EasyPermissions.PermissionCallbacks, BGANinePhotoLayout.Delegate{
}
實現的介面作用
IRecyclerView.OnSizeChangedListener:監聽RecyclerView佈局變化
BaseQuickAdapter.RequestLoadMoreListener:BaseQuickAdapter介面卡上拉載入更多監聽
SwipeRefreshLayout.OnRefreshListener:android系統自帶下拉重新整理
EasyPermissions.PermissionCallbacks:簡單易懂的第三方SDK可以簡化許可權管理。本專案大圖預覽時用到
BGANinePhotoLayout.Delegate:實現九宮格大圖檢視功能
演示Apk下載
http://oor5869gg.bkt.clouddn.com/app-debug.apk
程式碼下載
http://download.csdn.net/detail/ming_ruo_xiao_xi/9908838