在做自定义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; }红色字体部分是关键。