Android-仿今日头条评论

来源:互联网 发布:短信轰炸软件免费版 编辑:程序博客网 时间:2024/06/04 17:57

废话不多说,先来看看今天地效果图

!这里写图片描述
看完效果图在来理一下思路,点击底部评论按钮,弹出貌似一个对话框的东东,点击别的地方,自动消失,点击收起键盘,还会留在底部,再点击空白处,自动消失,那么问题来了。

emoji表情键盘实现可以看我写的另一篇博客:
EmoJi表情键盘实现

  • 如何切换布局
  • 如何点击空白处自动收起键盘
  • 背景如何透明

  • 具体实现
public class CommentDialog extends DialogFragment implements TextWatcher, View.OnClickListener {    //点击发表,内容不为空时的回调    public SendListener sendListener;    private TextView tv_send;    private String hintText;    private Dialog dialog;    private EditText et_content;    private ImageView iv_emoji;    public CommentDialog() {    }    @SuppressLint("ValidFragment")    public CommentDialog(String hintText, SendListener sendBackListener) {//提示文字        this.hintText = hintText;        this.sendListener = sendBackListener;    }    public Dialog onCreateDialog(Bundle savedInstanceState) {        // 使用不带Theme的构造器, 获得的dialog边框距离屏幕仍有几毫米的缝隙。        dialog = new Dialog(getActivity(), R.style.Comment_Dialog);        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); // 设置Content前设定        View contentView = View.inflate(getActivity(), R.layout.dialog_comment, null);        dialog.setContentView(contentView);        dialog.setCanceledOnTouchOutside(true); // 外部点击取消        // 设置宽度为屏宽, 靠近屏幕底部。        Window window = dialog.getWindow();        WindowManager.LayoutParams lp = window.getAttributes();        lp.gravity = Gravity.BOTTOM; // 紧贴底部        lp.alpha = 1;        lp.dimAmount = 0.0f;        lp.width = WindowManager.LayoutParams.MATCH_PARENT; // 宽度持平        window.setAttributes(lp);        window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);        iv_emoji = (ImageView) contentView.findViewById(R.id.iv_emoji);        et_content = (EditText) contentView.findViewById(R.id.dialog_comment_content);        et_content.setHint(hintText);        tv_send = (TextView) contentView.findViewById(R.id.dialog_comment_send);        et_content.addTextChangedListener(this);        tv_send.setOnClickListener(this);        iv_emoji.setOnClickListener(this);        et_content.setFocusable(true);        et_content.setFocusableInTouchMode(true);        et_content.requestFocus();        final Handler handler = new Handler();        dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {            @Override            public void onDismiss(DialogInterface dialog) {                handler.postDelayed(new Runnable() {                    @Override                    public void run() {                        CommonUtils.hideSoftKeyBoard(getActivity());                    }                }, 200);            }        });        return dialog;    }    public void cleanText() {        et_content.setText("");    }    @Override    public void beforeTextChanged(CharSequence s, int start, int count, int after) {    }    @Override    public void onTextChanged(CharSequence s, int start, int before, int count) {    }    @Override    public void afterTextChanged(Editable s) {        if (s.length() > 0) {            tv_send.setEnabled(true);            tv_send.setTextColor(Color.BLACK);        } else {            tv_send.setEnabled(false);            tv_send.setTextColor(Color.GRAY);        }    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.dialog_comment_send:                checkContent();                break;            case R.id.iv_emoji:                et_content.setText("");                break;        }    }    private void checkContent() {        String content = et_content.getText().toString().trim();        if (TextUtils.isEmpty(content)) {            Toast.makeText(getContext(), "评论内容不能为空", Toast.LENGTH_SHORT).show();            return;        }        sendListener.sendComment(content);        dismiss();    }    public interface SendListener {        void sendComment(String inputText);    }}
  • dialogfragment样式(Comment_Dialog)
<style name="Comment_Dialog" parent="@style/AppTheme">        <item name="android:layout_width">match_parent</item>        <item name="android:layout_height">wrap_content</item>        <item name="android:windowIsFloating">true</item>        <item name="android:backgroundDimEnabled">false</item>        <item name="android:windowSoftInputMode">stateAlwaysVisible</item><!--显示软件盘-->        <item name="android:backgroundDimAmount">0.5</item>    </style>
  • 调用
 private void showCommentDialog() {        new CommentDialog("优质评论将会被优先展示", new CommentDialog.SendListener() {            @Override            public void sendComment(String inputText) {                Toast.makeText(getApplicationContext(),inputText,Toast.LENGTH_SHORT).show();            }        }).show(getSupportFragmentManager(), "comment");    }
  • 最终效果图

这里写图片描述