Android周記4:下部ポップアップボックスBottomDialogを簡単にパッケージ

3329 ワード

前言
このボトムにポップアップされたビューは通常のビューに追加されていると思っていたので、その原理はあまり気になりませんでしたが、AlertDialogソースコードをざっと見てDialogのサブクラスであることがわかり、WindowManagerで生成されたWindowオブジェクトにViewを追加してスクリーン図層の最上位に表示しました.ネット上の他の人が書いたソースコードを見てみると、コードは簡単だと思いますが、使いにくいので、パッケージしました.みんなに効果を見せてください.
プレゼンテーション1
プレゼンテーション2
プロジェクトアドレス
https://github.com/Ccapton/BottomDialog
キーソース解析:
私はAlertDialogのBuilderデザインモードでこのBottomDialogをパッケージしています.このコントロールを熟知するのに便利です.次は重要なBuilderクラスコードです
public static class Builder{
        private LinearLayout bottomLayout; //     
        private View contentView;             //     
        private Dialog dialog;             // dialog  
        private boolean hasAnimation = true;  //             
        private Context context;    // activity fragment      
        private int layoutId;       //       id

        public Builder(Context context) {
             this.context = context;
             //                (   LinearLayout)
             bottomLayout = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.layout_bottomdialog,null);
        }
        public Builder setContentView(int layoutId){
            this.layoutId = layoutId;
            //       ,        bottomLayout,        
            this.contentView = LayoutInflater.from(context).inflate(this.layoutId,bottomLayout);
            return Builder.this;
        }
        public Builder setContentView(View contentView){
            this.contentView = contentView;
          //         contentView           
            this.bottomLayout.addView(contentView);
            return Builder.this;
         }
        public Builder setHasAnimation(boolean hasAnimation){
            this.hasAnimation  = hasAnimation;
            return Builder.this;
        }

        public BottomDialog create(){

            BottomDialog bottomDialog = new BottomDialog();  //    bottomDialog  
            dialog = new Dialog(context,R.style.BottomDialog);  //    dialog  
            contentView.measure(0, 0);  //   contentView
            bottomLayout.measure(0,0); //    bottomLayout
          //  Dialog  View
            dialog.setContentView(bottomLayout);

            Window dialogWindow = dialog.getWindow();  //  dialog     window  
//   Gravity, contentView      Window   ,              ,               
            dialogWindow.setGravity(Gravity.BOTTOM);  

            if(hasAnimation)
            dialogWindow.setWindowAnimations(R.style.DialogAnimation);

           /*
           *  Window  
           */
            WindowManager.LayoutParams lp = dialogWindow.getAttributes();
            lp.x = 0;
            lp.y = 0;
            lp.width = (int) context.getResources().getDisplayMetrics().widthPixels;
            lp.height = bottomLayout.getMeasuredHeight();
            Log.i("BottomDialog","width = "+lp.width);
            Log.i("BottomDialog","height = "+lp.height);
            lp.alpha = 9f; //    
            dialogWindow.setAttributes(lp);

          //   dialog
            dialog.show();

            bottomDialog.dialog = this.dialog;
            bottomDialog.contentView = this.contentView;

            return bottomDialog;
        }
    }

このパッケージのコントロールは大体このようにして、興味のある友达は私のgithubに来て見てくださいhttps://github.com/Ccapton/BottomDialog https://github.com/Ccapton