主要逻辑代码为:
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
super.onCreateDialog(savedInstanceState);
Dialog dialog = new Dialog(getActivity(), R.style.BottomDialog);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); // 设置Content前设定
dialog.setContentView(R.layout.bottom_menu);
dialog.setCanceledOnTouchOutside(true); // 外部点击取消
// 设置宽度为屏宽, 靠近屏幕底部。
Window window = dialog.getWindow();
//设置dialog的 进出 动画
window.setWindowAnimations(R.style.animate_dialog);
WindowManager.LayoutParams lp = window.getAttributes();
lp.gravity = Gravity.BOTTOM; // 紧贴底部
lp.width = WindowManager.LayoutParams.MATCH_PARENT; // 宽度持平
window.setAttributes(lp);
final Button btn1 = (Button) dialog.findViewById(R.id.empty);
Button btn2 = (Button) dialog.findViewById(R.id.loading);
Button btn3 = (Button) dialog.findViewById(R.id.retry);
Button btn4 = (Button) dialog.findViewById(R.id.suc);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btn1.setTextColor(Color.RED);
}
});
return dialog;
}
<style name="BottomDialog" parent="@style/AppTheme">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
<style name="animate_dialog">
<item name="android:windowEnterAnimation">@anim/dialog_enter</item>
<item name="android:windowExitAnimation">@anim/dialog_out</item>
</style>
dialog_enter:
<translate
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200"
android:fromYDelta="100%p"
android:interpolator="@android:interpolator/accelerate_decelerate"
android:toYDelta="0%p"/>
dialog_out:
<translate
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromYDelta="0%p"
android:toYDelta="100%p"/>
override fun onStart() {
super.onStart()
val windowParams = dialog.window.getAttributes()
// windowParams.dimAmount = 0.0f
windowParams.y = -50
dialog.window.setAttributes(windowParams)
getDialog().getWindow().setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
//getDialog().getWindow().setLayout(-1, -2);//这2行,和上面的一样,注意顺序就行;
getDialog().getWindow().setLayout((RudenessScreenHelper.getScreenSize(app)[0] *0.92f).toInt(), -2)//这2行,和上面的一样,注意顺序就行;
}