自定义Dialog,view根据需要自定义填充

在项目开发中,经常会用到各种样式的Dialog,不是特殊情况下的,通过Android系统提供了Dialog类,以及Dialog的子类,常见如AlertDialog就可以实现此类功能;
一般情况下,利用Android提供的Dialog及其子类能够满足多数此类需求,然而,其不足之处体现在:

  1. 基于Android提供的Dialog及其子类样式单一,风格上与App本身风格可能不太协调;

  2. Dialog弹窗在布局和功能上有所限制,有时不一定能满足实际的业务需求。

public class CustomDialog extends Dialog {
    /**
     * 1.final Dialog builder = new CustomDialog(this);
     * 2.LayoutInflater inflater = (LayoutInflater)    CiticRechargeActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     * 3.view = inflater.inflate(R.layout.citic_message_code, null);
     * 4.builder.setContentView(view);
     * 5.builder.show();
     */
    private static final float DEFAULT_WIDTH_PERCENT = 0.75f;
    private static final float DEFAULT_HEIGHT_PERCENT = 0.0f;
    private WindowManager mWindowManager;
    private Display mDisplay;
    protected LayoutInflater mInflater;

    public CustomDialog(Context context) {
        super(context, R.style.CustomDialog);
        mWindowManager = (WindowManager) context
                .getSystemService(Context.WINDOW_SERVICE);
        mDisplay = mWindowManager.getDefaultDisplay();
        mInflater = LayoutInflater.from(context);
    }

    public void show() {
        show(DEFAULT_HEIGHT_PERCENT, DEFAULT_WIDTH_PERCENT);
    }

    public void show(float heightPercent, float widthPercent) {
        super.show();
        WindowManager.LayoutParams mParams = this.getWindow().getAttributes();
        mParams.width = (int) (mDisplay.getWidth() * widthPercent);
        if (heightPercent != DEFAULT_HEIGHT_PERCENT) {
            mParams.height = (int) (mDisplay.getHeight() * heightPercent);
        }
        this.getWindow().setAttributes(mParams);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // back按键不做处理。
        return true;
    }
}

这种方式不是针对某一特殊情况而作的处理,因为Dialog中的视图是开发人员自定义的,通过view,builder.setContentView(view);进行填充,这样可以满足绝大部分的需求;
使用方式:

1.final Dialog builder = new CustomDialog(this);
2.LayoutInflater inflater = (LayoutInflater)    CiticRechargeActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
3.view = inflater.inflate(R.layout.citic_message_code, null);
4.builder.setContentView(view);
5.builder.show();

对于view中的控件可以设置相应的监听,这里要注意的是,在findViewById的时候,要通过该view进行,否则会报错,如:

iv_auth_code = (ImageView) view.findViewById(R.id.iv_auth_code);

然后就可以进行相应的处理了;
难度不是很大,但是希望可以帮助有需要的人;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值