1、实现普通的dialog效果
新建一个类 继承AppCompatDialogFragment 并实现onCreateDialog方法
public class CustomDialog extends AppCompatDialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("提示")
.setMessage("新建一个类 继承AppCompatDialogFragment 并实现onCreateDialog方法")
.setPositiveButton("确定", null)
.setNegativeButton("取消", null);
return builder.create();
}
}
使用方法
CustomDialog dialog=new CustomDialog();
dialog.show(getSupportFragmentManager(),"custom");//custom 设置一个tag
2、实现自定义的dialog
实现方法换了onCreateView
public class CustomDialog extends AppCompatDialogFragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NO_TITLE,R.style.dialogFull);//全屏显示
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.custom_dialog, null);//任意添加一个测试布局即可
}
}
全屏显示
<style name="dialogFull" parent="Animation.AppCompat.Dialog">
<item name="android:windowIsFloating">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:background">@android:color/transparent</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
</style>
3、顶部弹窗效果
public class TopDialog extends AppCompatDialogFragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NO_TITLE, R.style.dialogFull);//全屏dialog
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.top_dialog, container);
}
@Override
public void onStart() {
super.onStart();
Window window = getDialog().getWindow();
WindowManager.LayoutParams windowParams = window.getAttributes();
windowParams.dimAmount = 0.0f;//Dialog外边框透明
window.setLayout(windowParams.MATCH_PARENT, windowParams.WRAP_CONTENT); //高度自适应,宽度全屏
windowParams.gravity = Gravity.TOP; //在顶部显示
windowParams.windowAnimations = R.style.top_dialog_anim;
window.setAttributes(windowParams);
}
}
<style name="top_dialog_anim">
<item name="android:windowEnterAnimation">@anim/top_dialog_in</item>
<item name="android:windowExitAnimation">@anim/top_dialog_out</item>
</style>
top_dialog_in
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromYDelta="-100%"
android:interpolator="@android:anim/accelerate_interpolator"
android:toYDelta="0" />
</set>
top_dialog_out
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromYDelta="0"
android:interpolator="@android:anim/accelerate_interpolator"
android:toYDelta="-100%" />
</set>
取消弹窗
getDialog().setCanceledOnTouchOutside(true);