仿抖音评论底部弹出框(列表框+发表框)

仿抖音评论底部弹出框(列表框+发表框)

2023年7月15日发(作者:)

仿抖⾳评论底部弹出框(列表框+发表框)BottomSheetDialogFragment⾼仿抖⾳评论底部弹出框先看效果图:这个弹窗的效果是使⽤BottomSheetDialogFragment做的,第⼀个弹出的对话框为CommentListDialogFragment ,第⼆个弹出的对话框为SendCommentDialogFragment,代码如下:展⽰

CommentListDialogFragment。public class CommentListDialogFragment extends BottomSheetDialogFragment { private Dialog dialog; @Override public void onCreate(@Nullable Bundle savedInstanceState) { te(savedInstanceState); setStyle(_NO_FRAME, Theme);//给dialog设置主题为透明背景

不然会有默认的⽩⾊背景 } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { dialog = teDialog(savedInstanceState); celedOnTouchOutside(true);//设置点击外部可消失 Window win = dow(); Params params = ributes(); tInputMode(_INPUT_ADJUST_NOTHING);//设置使软键盘弹出的时候dialog不会被顶起 dowAnimations(_Dialog_Bottom);//这⾥设置dialog的进出动画 return dialog; } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { //

在这⾥将view的⾼度设置为精确⾼度,即可屏蔽向上滑动不占全屏的⼿势。如果不设置⾼度的话

会默认向上滑动时dialog覆盖全屏 View view = e(_dialog, container, false); outParams(new Params(_PARENT, getScreenHeight(getActivity()) * 2 / 3)); return view; } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { TextView postCommentText = ewById(); RecyclerView recyclerView = ewById(); outManager(new LinearLayoutManager(getContext())); ItemAdapter itemAdapter = new ItemAdapter(); pter(itemAdapter); lickListener(new kListener() { @Override public void onClick(View view) { //写评论的弹出框 SendCommentDialogFragment dialogFragment = new SendCommentDialogFragment(); (getFragmentManager(),ss().getName()); } }); } /** *

得到屏幕的⾼ */ public static int getScreenHeight(Context context) { WindowManager wm = (WindowManager) temService(_SERVICE); int height = aultDisplay().getHeight(); return height; } @Override public void onStart() { t(); final View view = getView(); (new Runnable() { @Override public void run() { View parent = (View) ent(); Params params = (Params) (parent).getLayoutParams(); or behavior = avior(); BottomSheetBehavior mBottomSheetBehavior = (BottomSheetBehavior) behavior; eable(false);//禁⽌下拉取消弹框 kHeight(suredHeight());//让dialog的内容显⽰完整 } }); } public class ItemAdapter extends r { @NonNull @Override public lder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { return new ViewHolder((getContext()).inflate(_comment, parent, false)); } @Override public void onBindViewHolder(@NonNull lder holder, int position) { TextView comment = ewById(t); TextView name=ewById(); t("⽤户"+position+":"); t("评论:" + position); } @Override public long getItemId(int position) { return position; } @Override public int getItemCount() { return 30; } class ViewHolder extends lder { public ViewHolder(@NonNull View itemView) { super(itemView); } } }}展⽰

SendCommentDialogFragment。public class SendCommentDialogFragment extends BottomSheetDialogFragment { private Dialog dialog; private int mLastDiff = 0;//键盘弹出过程中最后的⾼度值 @Override public void onCreate(@Nullable Bundle savedInstanceState) { te(savedInstanceState); setStyle(_NO_FRAME, Theme);//给dialog设置主题为透明背景

不然会有默认的⽩⾊背景 } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { dialog = teDialog(savedInstanceState); celedOnTouchOutside(true);//设置点击外部可消失 Window win = dow(); Params params = ributes(); tInputMode(_INPUT_STATE_VISIBLE | _INPUT_ADJUST_RESIZE);//配置输⼊法,避免弹出遮挡布局 dowAnimations(_Dialog_Bottom);//这⾥设置dialog的进出动画 return dialog; } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = e(_sendcomment, container, false); outParams(new Params(_PARENT, _CONTENT)); return view; } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { //_ly这⾥是根布局 LinearLayout dialogLy = ewById(_ly); ayoutChangeListener(new utChangeListener() { @Override public void onLayoutChange(View view, int i, int i1, int i2, int i3, int i4, int i5, int i6, int i7) { Rect r = new Rect(); dow().getDecorView().getWindowVisibleDisplayFrame(r);//获取当前界⾯可视部分 int screenHeight = dow().getDecorView().getRootView().getHeight();//获取屏幕的⾼度 int heightDifference = screenHeight - ;//此处就是⽤来获取键盘的⾼度的,

在键盘没有弹出的时候

此⾼度为0

键盘弹出的时候为⼀个正数 if (heightDifference <= 0 && mLastDiff > 0) { onDismiss(dialog);//⼿动关闭输⼊法时,对话框也跟着关闭 } mLastDiff = heightDifference; } }); } @Override public void onStart() { t(); final View view = getView(); (new Runnable() { @Override public void run() { View parent = (View) ent(); Params params = (Params) (parent).getLayoutParams(); Params params = (Params) (parent).getLayoutParams(); or behavior = avior(); BottomSheetBehavior mBottomSheetBehavior = (BottomSheetBehavior) behavior; eable(false);//禁⽌下拉取消弹框 kHeight(suredHeight());//让内容显⽰完整 } }); }}注意在弹出(SendCommentDialogFragment)也就是第⼆个对话框的时候,部分的布局控件会被输⼊法给遮挡,解决办法就是在res/values/styles⽂件中找到该对话框的主题⽂件,然后配置输⼊法,像这样:加上这两句代码,布局就能正常地显⽰啦。

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689426116a246260.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信