隐藏系统布局的ProgressDialog中的button

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;
		}
	}






正常效果:隐藏系统布局的ProgressDialog中的button_第1张图片 

需要按钮的时候就pb.setButton()增加一个,不需要按钮只需要显示信息的时候就把按钮隐藏。



异常效果:  

                                 隐藏系统布局的ProgressDialog中的button_第2张图片       

 pd.getButton(DialogInterface.BUTTON_NEGATIVE).setVisibility(View.GONE);
当我这样隐藏那个确认按钮,然后再次只显示信息,发现按钮那里并没有消失只是变成了空白,很明显button外面应该嵌套了一层或几层布局。


知道原因了,现在只需要确认button的第几层父布局和显示信息的父布局是同级的。

在eclipse中打开Open Perspective-------------->>Hierarchy View

隐藏系统布局的ProgressDialog中的button_第3张图片


然后连接手机后,打开异常效果界面,现在我们就看到这个ProgressDialog的布局树

隐藏系统布局的ProgressDialog中的button_第4张图片

然后发现下面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;,就没有上述的异常效果了。

你可能感兴趣的:(android,view,dialog,hierarchy,ProgressDialog)