下にスライドしたdialogをカスタマイズ
3645 ワード
目的:終了、下部からのスライド、スライドアウトのためのカスタムdialogを実現
解決する問題:
1.dialogの位置は最後まで修正しなければならない.
2.dialogにはデフォルトのpaddingがあり、これらのpaddingに行って、dialogを画面と同じ幅にします.(これはGravity.widthの設定ではできません)
3.dialogのスライドインとスライドアウトアニメーション;(styleにはenterとexitアニメーション属性があります)
ソリューション:
例:LogoutDialogクラスから継承されたLogoutDialogを書く
質問1と2について:
dialogにアニメーションを追加
style :
anim :
dialog_slide_down:
dialog_slide_up:
完全なコード:
THE END
解決する問題:
1.dialogの位置は最後まで修正しなければならない.
2.dialogにはデフォルトのpaddingがあり、これらのpaddingに行って、dialogを画面と同じ幅にします.(これはGravity.widthの設定ではできません)
3.dialogのスライドインとスライドアウトアニメーション;(styleにはenterとexitアニメーション属性があります)
ソリューション:
例:LogoutDialogクラスから継承されたLogoutDialogを書く
質問1と2について:
Window window = this.getWindow();
// dialog title, setContentView()
window.requestFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.layout_logout_confirm);
// dialog padding
window.getDecorView().setPadding(0, 0, 0, 0);
WindowManager.LayoutParams lp = window.getAttributes();
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
// dialog
lp.gravity = Gravity.BOTTOM;
window.setAttributes(lp);
dialogにアニメーションを追加
dialog style, style , ( )。
WindowManager.LayoutParams lp = window.getAttributes();
lp.windowAnimations = R.style.MyDialogAnimation;// Animation,style ,
style :
anim :
dialog_slide_down:
dialog_slide_up:
完全なコード:
public class MyLogoutConfirmDialog extends Dialog implements View.OnClickListener {
@ViewInject(id = R.id.logout_dialog_exit, click = true)
RelativeLayout exitButton;
@ViewInject(id = R.id.logout_dialog_cancel, click = true)
RelativeLayout cancelButton;
MyDialogClickListener myDialogClickListener;
public MyLogoutConfirmDialog(Context context, MyDialogClickListener myDialogClickListener) {
super(context, R.style.MyDialogStyle);
this.myDialogClickListener = myDialogClickListener;
init();
}
private void init() {
Window window = this.getWindow();
window.requestFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.layout_logout_confirm);
ViewInjectUtils.initInjectedView(this, window.getDecorView());
window.getDecorView().setPadding(0, 0, 0, 0);
WindowManager.LayoutParams lp = window.getAttributes();
lp.windowAnimations = R.style.MyDialogAnimation;
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
lp.gravity = Gravity.BOTTOM;
window.setAttributes(lp);
show();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.logout_dialog_exit:
dismiss();
myDialogClickListener.exit();
break;
case R.id.logout_dialog_cancel:
dismiss();
break;
}
}
public interface MyDialogClickListener {
void exit();
}
}
THE END