隱藏系統佈局的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;
		}
	}






正常效果: 

需要按鈕的時候就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;,就沒有上述的異常效果了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章