Android周記4:下部ポップアップボックスBottomDialogを簡単にパッケージ
3329 ワード
前言
このボトムにポップアップされたビューは通常のビューに追加されていると思っていたので、その原理はあまり気になりませんでしたが、AlertDialogソースコードをざっと見てDialogのサブクラスであることがわかり、WindowManagerで生成されたWindowオブジェクトにViewを追加してスクリーン図層の最上位に表示しました.ネット上の他の人が書いたソースコードを見てみると、コードは簡単だと思いますが、使いにくいので、パッケージしました.みんなに効果を見せてください.
プレゼンテーション1
プレゼンテーション2
プロジェクトアドレス
https://github.com/Ccapton/BottomDialog
キーソース解析:
私はAlertDialogのBuilderデザインモードでこのBottomDialogをパッケージしています.このコントロールを熟知するのに便利です.次は重要なBuilderクラスコードです
このパッケージのコントロールは大体このようにして、興味のある友达は私のgithubに来て見てくださいhttps://github.com/Ccapton/BottomDialog https://github.com/Ccapton
このボトムにポップアップされたビューは通常のビューに追加されていると思っていたので、その原理はあまり気になりませんでしたが、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