DialogFragment的使用

  • Activity向Dialog传递数据
 
public static MyDialogFragment newInstance(int num) {
        MyDialogFragment fragment = new MyDialogFragment();
        // Supply num input as an argument.
        Bundle args = new Bundle();
        args.putInt(“num”, num);
        fragment.setArguments(args);
        return fragment;
    }
 
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mNum = getArguments().getInt(“num”);
}
  • Dialog向Activity传参
//利用接口传参,在DialogFragment中定义接口
public interface DialogListener {
  void onComplete(String result);
}
 
//Activity实现该接口
public class MyActivity extends Activity implements DialogListener {
// …
   @Override
   public void onComplete(String result){
     //使用参数
   }
}
 
//在DialogFragment中传参数
DialogListener listener=(DialogListener)getActivity();
listener.onComplete(result); //传参数
  • 设置属性:宽高、背景、位置等
   在xml中设置和onCreateView(), onViewCreated()中设置无效. 在onStart()和onResume()中设置才有效.    
    @Override
    public void onStart() {
        super.onStart();
        Dialog dialog = getDialog();
        if (dialog != null) {
            getDialog().getWindow().setBackgroundDrawableResource(android.R.color.transparent);
            dialog.getWindow().setLayout(AutoUtils.getPercentWidthSize(1024), AutoUtils.getPercentHeightSize(684));
            dialog.getWindow().setGravity(Gravity.CENTER);
        }
    }
 
  • 设置背景Activity的明暗度
// 0-1 , 1表示完全昏暗
getDialog().getWindow().setDimAmount(0.8f);
  • 去除标题栏
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
     getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE); //去除标题栏
     return inflater.inflate(R.layout.dialog, container, false);
}
  • 设置点击外部/返回键不消失
getDialog.setCancelable(false);
getDialog.setCanceledOnTouchOutside(false);
 
getDialog().setOnKeyListener(new DialogInterface.OnKeyListener() {
            @Override
            public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_BACK) {
                    return true;
                }
                return false;
            }
        });
  • Enter和Exit动画 (飞入飞出)
//在style.xml中引入自定义动画

 

 
//在Java代码中设置窗口动画
getDialog().getWindow().getAttributes().windowAnimations = R.style.CustomDialog;
 
//popwin_show_anim.xml代码
<translate
     android:duration=”300″
     android:fromYDelta=”100%p”
     android:toYDelta=”0″ />
<alpha
    android:duration=”300″
    android:fromAlpha=”0.0″
    android:toAlpha=”1.0″ />
 
//popwin_hide_anim.xml代码
 
<translate
    android:duration=”300″
    android:fromYDelta=”0″
    android:toYDelta=”50%p”/>
<alpha
    android:duration=”300″
    android:fromAlpha=”1.0″
    android:toAlpha=”0.8″/>

 

留下评论

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理