【GT-安卓应用开发之评论弹窗实现】

前言:最初实现评论的时候,我是在利用setVisibility来控制输入框的隐藏与显示来实现评论。但是发现这样做,弹出键盘的时候会把整个界面推上去,不大符合人们的使用习惯。因此,我决定采用弹窗的形式来实现评论与回复。

        记录下用到的场景:1、点击评论ICON,2、点击评论列表进行回复

         

public class PlDialog extends DialogFragment {

    //点击发表,内容不为空时的回调
    public SendBackListener sendBackListener;
    public interface  SendBackListener{
        void sendBack(String inputText);
    }

    private String texthint;

    private Dialog dialog;
    private EditText inputDlg;
    private int numconut=300;
    private String tag=null;

    public PlDialog() {
    }


    @SuppressLint("ValidFragment")
    public PlDialog(String texthint, SendBackListener sendBackListener){//提示文字
        this.texthint=texthint;
        this.sendBackListener=sendBackListener;

    }



    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // 使用不带Theme的构造器, 获得的dialog边框距离屏幕仍有几毫米的缝隙。
        dialog = new Dialog(getActivity(), R.style.PlDialog);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); // 设置Content前设定
//        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
        View contentview = View.inflate(getActivity(), R.layout.comment_dialog_layout, 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.5f;
        lp.width = WindowManager.LayoutParams.MATCH_PARENT; // 宽度持平
        window.setAttributes(lp);
        window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
        inputDlg = (EditText) contentview.findViewById(R.id.dialog_comment_content);
        inputDlg.setHint(texthint);
        final TextView tv_send = (TextView) contentview.findViewById(R.id.dialog_comment_send);
        inputDlg.addTextChangedListener(new TextWatcher() {
            @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.setBackgroundResource(R.drawable.corners_review_cansend);
                } else {
                    tv_send.setBackgroundResource(R.drawable.corners_review_send);
                }

            }
        });

        tv_send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (TextUtils.isEmpty(inputDlg.getText().toString())) {
                    Toast.makeText(getActivity(),"输入内容为空",Toast.LENGTH_LONG).show();
                    return;
                } else {
                    sendBackListener.sendBack(inputDlg.getText().toString());
                }
            }
        });
        inputDlg.setFocusable(true);
        inputDlg.setFocusableInTouchMode(true);
        inputDlg.requestFocus();
        final Handler hanler = new Handler();
        dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
            public InputMethodManager mInputMethodManager;

            @Override
            public void onDismiss(DialogInterface dialog) {
                hanler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        hideSoftkeyboard();
                    }
                }, 200);

            }
        });
        return dialog;
    }


    public void hideSoftkeyboard() {
        try {
            ((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE))
                    .hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(),
                            InputMethodManager.HIDE_NOT_ALWAYS);
        } catch (NullPointerException e) {

        }
    }


}

       上面的代码是弹出框的代码,如何使用呢?

dialog = new PlDialog("评论:", new PlDialog.SendBackListener() {
    @Override
    public void sendBack(final String inputText) {
        //Toast.makeText(MyApplication.getContextObject(),inputText,Toast.LENGTH_SHORT).show();
        final String[] s = pinStr.split("#");
        //Toast.makeText(MyApplication.getContextObject(),pinStr,Toast.LENGTH_SHORT).show();
        pinglun("pl",s,mData.get(position1).getDy_id()+"",inputText);
        dialog.dismiss();
    }
});
dialog.show(getFragmentManager(), "dialog");

       如果是回复的话,就修改上段代码中的“评论:”即可。

猜你喜欢

转载自blog.csdn.net/qq_17433217/article/details/81530745