• 自定义dialog样式,自动弹出软件盘


    开发中android自带dialog样式有时候不能满足我们的需求,这时候就需要自定义样式了,调用dialog的setView方法可以自定义布局,代码如下

    final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
    
            View alertDialogView = View.inflate(context, R.layout.comment_input_layout, null);
            final AlertDialog alertDialog = alertDialogBuilder.create();
            alertDialog.setView(alertDialogView, 0, 0, 0, 0);
    
            final EditText editText = (EditText) alertDialogView.findViewById(R.id.etContent);
    
            alertDialog.show();
    
    //      设置dialog从底部出现动画
            Window window = alertDialog.getWindow();
            window.setContentView(R.layout.comment_input_layout);
            window.setGravity(Gravity.BOTTOM);
            window.setWindowAnimations(R.style.comment_input_dilog_anim_style);
            WindowManager windowManager = ((Activity) context).getWindowManager();
            Display display = windowManager.getDefaultDisplay();
            WindowManager.LayoutParams lp = alertDialog.getWindow().getAttributes();
            lp.width = (int) (display.getWidth()); //设置宽度
            window.setAttributes(lp);
            });
    View Code

    通过window设置从底部进入动画,必须在dialog.show()后面设置

    但是这样写完之后,如果布局中有edittext,当dialog显示的时候,并不会自动弹出软件盘,于是需要在show()方法之前加上如下代码:

    InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.showSoftInput(etContent, InputMethodManager.RESULT_SHOWN);
            imm.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY);

    toggleSoftInput方法是切换软键盘的显示与隐藏,第一个参数不能传InputMethodManager.SHOW_FORCED,否则关闭dialog的时候不能关掉软键盘。

    本来以为这样已经完美了。。。但是问题又来了,在声明edittext后声明了取消和确定两个button,并设置了监听,但是监听不起作用,按钮点击没有任何反应。解决办法:

    在设置动画,宽度等操作后面再用window.findViewById声明控件,设置监听事件。具体原因不知道,感觉是window.setContentView(R.layout.comment_input_layout);

    把原来的控件覆盖掉了,最后附上完整代码:

    final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
    
            View alertDialogView = View.inflate(context, R.layout.comment_input_layout, null);
            final AlertDialog alertDialog = alertDialogBuilder.create();
            alertDialog.setView(alertDialogView, 0, 0, 0, 0);
    
            final EditText editText = (EditText) alertDialogView.findViewById(R.id.etContent);
    
            //自动弹出软键盘
            alertDialog.setOnShowListener(new DialogInterface.OnShowListener() {
                public void onShow(DialogInterface dialog) {
                    InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.showSoftInput(editText, InputMethodManager.RESULT_SHOWN);
                    imm.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY);
                }
            });
            alertDialog.show();
    
            Window window = alertDialog.getWindow();
            window.setContentView(R.layout.comment_input_layout);
            window.setGravity(Gravity.BOTTOM);
            window.setWindowAnimations(R.style.comment_input_dilog_anim_style);
            WindowManager windowManager = ((Activity) context).getWindowManager();
            Display display = windowManager.getDefaultDisplay();
            WindowManager.LayoutParams lp = alertDialog.getWindow().getAttributes();
            lp.width = (int) (display.getWidth()); //设置宽度
            window.setAttributes(lp);
    
            ImageButton ibtnClose=(ImageButton)window.findViewById(R.id.ibtnClose);
            final ImageButton ibtnRight=(ImageButton)window.findViewById(R.id.ibtnRight);
            final EditText etContent = (EditText) window.findViewById(R.id.etContent);
            ibtnClose.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    alertDialog.cancel();
                }
            });
    
            ibtnRight.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if(ibtnRightClickListener!=null){
                        ibtnRightClickListener.sendComment(etContent.getText().toString());
                    }
                    alertDialog.cancel();
                }
            });
    View Code
  • 相关阅读:
    js setInterval() 用法示例
    js 判断iframe是否加载完毕
    el表达式 多条件判断
    exception java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment
    oracle 存储过程 示例
    linux下小试redis demo
    关于数组的一些经常使用函数
    大话设计模式—何为设计模式
    窗口间传值的几种方法
    ncurses简单的一个多窗体程序
  • 原文地址:https://www.cnblogs.com/3A87/p/4995240.html
Copyright © 2020-2023  润新知