Android DialogFragment(圆角失效和动画失效)

一、概述

需求的效果如下

Android DialogFragment(圆角失效和动画失效)_第1张图片

二、实现过程:

自定义dialog:

public class PayDialogFragment extends DialogFragment implements View.OnClickListener {

    private NoticeDialogListener listener;

    public PayDialogFragment(double amount, NoticeDialogListener listener) {
        this.amount = amount;
        this.listener = listener;
    }
    
    //定义点击回调接口
    public interface NoticeDialogListener {
         void onDialogBtnClick(int payType);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //设置自定义样式
        setStyle(DialogFragment.STYLE_NORMAL,R.style.PayDialog);
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

         // getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
         // getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
          
          //设置动画
          getDialog().getWindow().setWindowAnimations(R.style.PayDialog);
          View view = inflater.inflate(R.layout.dialog_pay, container);

          ImageButton btn_cash = view.findViewById(R.id.btn_pay_cash);
          ImageButton btn_bank_card = view.findViewById(R.id.btn_pay_bank_card);
          ImageButton btn_scan_code = view.findViewById(R.id.btn_pay_scan_code);
          textView.setText(String.valueOf(amount));
          btn_cash.setOnClickListener(this);
          btn_bank_card.setOnClickListener(this);
          btn_scan_code.setOnClickListener(this);
        return view;
    }

    @Override
    public void onClick(View view) {
           switch (view.getId()){
               case R.id.btn_pay_cash:
                   listener.onDialogBtnClick(KTVType.PayType.CASH);
                   break;
               case R.id.btn_pay_bank_card:
                   listener.onDialogBtnClick(KTVType.PayType.CARD);
                   break;
               case R.id.btn_pay_scan_code:
                   listener.onDialogBtnClick(KTVType.PayType.QRCODE);
                   break;
           }
    }

}

Activity接收消息:

             ......
  private void openPayDialog(int poistion){          
          payDialog = new PayDialogFragment(ktvOrderInfoList.get(position).getPay_amount(),this);
          payDialog.show(getSupportFragmentManager(),"payDialog");

    }

    @Override
    public void onDialogBtnClick(int payType) {
        switch (payType){
            case KTVType.PayType.CASH:
                showShortText(this,payType);
                break;
            case KTVType.PayType.CARD:
                showShortText(this,payType);
                break;
            case KTVType.PayType.QRCODE:
                showShortText(this,payType);
                break;
        }

        payDialog.dismiss();
    }

style定义:

     
    

XMl布局文件:




    

    
        
        


            
            
        

        

            

            

        

        

            

            

        

    

shape_circle_white文件:




    
    
    

上面文件实现效果:

Android DialogFragment(圆角失效和动画失效)_第2张图片

三、解决问题

一开始以为是下面这两种错误,参考文章:自定义DialogFragment,DialogFragment 实现圆角效果,通过文章添加如下代码实现了需求的效果:

    public void onStart() {
        super.onStart();
        Dialog dialog =getDialog();
        if(dialog != null){
            DisplayMetrics displayMetrics = new DisplayMetrics();
            getActivity().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
            dialog.getWindow().setLayout((int) (displayMetrics.widthPixels *0.8),
            ViewGroup.LayoutParams.WRAP_CONTENT);
        }
    }

但是为什么上面会出现挤在一起的效果呢,主要分析是布局的宽度填充问题,发现txt_pay_amount的layout_width="wrap_content"是问题的关键,因为下面的都是000进行适配,所以设置layout_width="match_parent"就没得问题:

  

这样就不需要上面两篇文章的方式了,就可以实现了。

四、动画失效

修改主题添加动画

    

按理说再onCreate设置了自定义样式会出现动画,但是并没有,所以网上找了手动设置的,在onCreateView里面获取dialog赋值动画,即可暂时解决动画不出现问题。

getDialog().getWindow().setWindowAnimations(R.style.PayDialog);

 

你可能感兴趣的:(Android基础)