设置自定义Dialog的大小(补充)

    在做自定义Dialog(二)的例子时,遇到如下问题:

  1、Dialog的样式设为R.style.NoTitleDialogTheme时,效果可以出来,但搜索框的大小控制不了,本来设了1200的长度,但只显示了大约一半;

  2、Dialog的样式设为R.style.CustomSearchTheme时,搜索框可以弹出,大小也控制住了,但搜索框外的背景色为完全透明,得在布局文件中加了透明度,才能显示为半透明,并且点击页面空白区域,搜索框消失不了。

 
  
<style name="CustomSearchTheme" parent="android:TextAppearance">
 
  
   网上查询资料有两种方法可以控制Dialog的大小,一种是在dialog.show()之后,加上设置高度和宽度的代码,但这种方式有缺点:搜索框弹出后,软键盘没有跟着弹出来,必须点击一下才能出来。
  设置高度和宽度的代码是:
 
  
 
  
if (i == R.id.book_quer) {//搜索按钮
    Dialog dialog = DialogHelper.QueryDialog(CookbookHomeActivity.this, new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            EditText editText=(EditText) view.getTag();
            String keyword=editText.getText().toString().trim();
            searchStr = keyword;
            Log.e(TAG,"获取到的值===》"+editText.getText().toString());
            //startActivity(new Intent(CookbookHomeActivity.this, CookbooknotActivity.class));
            DialogUtil.showRoundProcessDialog(mContext,"数据加载中……",false);
            QueryBody dataBody = new QueryBody(keyword,"",1,10);
            BjDataBody body = BJServerBodyUtils.getBjDataBody(dataBody,true);
            QueryCookPresenter queryCookPresenter=new QueryCookPresenter(CookbookHomeActivity.this);
            queryCookPresenter.getBookQueryList(HttpAddr.CookBook_URL,body);

        }
    });
    dialog.show();

    Window window = dialog.getWindow();
    WindowManager.LayoutParams lp = window.getAttributes();
    lp.gravity = Gravity.CENTER;
    lp.width = 1200;//宽高可设置具体大小
    lp.height = 66;
    dialog.getWindow().setAttributes(lp);

}
注意:lp.width和lp.height不能设置为match_parent,虽然设为match_parent之后,显示效果是对的,但点击搜索框之外,搜索框不能消失。
另一种方法比较好用: 
  
    是在定义Dialog时,就直接设置控件的宽高:(不是在布局文件中,是在代码中)
 
  
public  static Dialog QueryDialog(Context context, final View.OnClickListener onClickListener){
                final Dialog dialog = new Dialog(context,R.style.NoTitleDialogTheme);
                LayoutInflater inflater = LayoutInflater.from(context);
                View view = inflater.inflate(R.layout.dialog_query, null);
                ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(1200,66);
                dialog.setContentView(view,params);
                final EditText et_quer=(EditText)view.findViewById(R.id.et_quer);
                ImageView tv_quer=(ImageView)view.findViewById(R.id.tv_quer);
                tv_quer.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        if(onClickListener!=null){
                            view.setTag(et_quer);
                            onClickListener.onClick(view);
                            dialog.dismiss();
                        }
                    }
                });
//                dialog.setView(view, 0, 0, 0, 0);

                return dialog;
            }
红色字体部分是关键。
 
  

你可能感兴趣的:(自定义控件)