ProgressDialog pd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); pd = new ProgressDialog(this,ProgressDialog.THEME_HOLO_LIGHT); } public void showWaitDialog(String msg, android.content.DialogInterface.OnClickListener lis) { tempLis = lis; if (lis != null) { pd.setButton(DialogInterface.BUTTON_NEGATIVE, "取消", mCancelLis); } pd.setMessage(msg); pd.setCancelable(true); pd.show(); } public void showWaitDialog(String msg) { if(pd.getButton(DialogInterface.BUTTON_NEGATIVE) !=null){ // pd.getButton(DialogInterface.BUTTON_NEGATIVE).setVisibility(View.GONE); //异常效果 ViewParent parent = pd.getButton(DialogInterface.BUTTON_NEGATIVE) .getParent().getParent(); LinearLayout layout = (LinearLayout) parent; layout.setVisibility(View.GONE); } showWaitDialog(msg, null); } public void showDialog(View v){ switch (v.getId()) { case R.id.button1: showWaitDialog("正在加载。。。"); break; case R.id.button2: showWaitDialog("出现异常,请重新加载", "确定", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { cancleWaitDialog(); } }); break; default: break; } }
需要按钮的时候就pb.setButton()增加一个,不需要按钮只需要显示信息的时候就把按钮隐藏。
异常效果:
pd.getButton(DialogInterface.BUTTON_NEGATIVE).setVisibility(View.GONE);当我这样隐藏那个确认按钮,然后再次只显示信息,发现按钮那里并没有消失只是变成了空白,很明显button外面应该嵌套了一层或几层布局。
知道原因了,现在只需要确认button的第几层父布局和显示信息的父布局是同级的。
在eclipse中打开Open Perspective-------------->>Hierarchy View
然后连接手机后,打开异常效果界面,现在我们就看到这个ProgressDialog的布局树
然后发现下面id/button2 就是确认按钮,button上面还有两层LinearLayout,第二层和显示信息的是同级的,所以把第二层LinearLayout隐藏就行了,代码如下:
ViewParent parent = pd.getButton(DialogInterface.BUTTON_NEGATIVE) .getParent().getParent(); LinearLayout layout = (LinearLayout) parent; layout.setVisibility(View.GONE);
注意:ProgressDialog 我只new了一次,所以要隐藏按钮实现效果,如果你每次显示都new,取消的时候都把pd = null;,就没有上述的异常效果了。