隐藏系统布局的ProgressDialog中的button

来源:互联网 发布:贝叶斯网络模型 编辑:程序博客网 时间:2024/05/20 05:24

ProgressDialog pd;@Overrideprotected 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() {@Overridepublic 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;,就没有上述的异常效果了。

0 0