效果图:
xml布局(完全自定义,想怎么写就怎么写):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="20dp"
android:paddingRight="15dp"
android:paddingLeft="15dp"
android:paddingBottom="20dp"
android:background="@drawable/shape_bg_musician_enter">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="清理缓存"
android:textSize="18sp"
android:gravity="center"
android:textColor="@color/colorTextTitleBar"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/text_dialog_clear"
android:textSize="16.8sp"
android:lineSpacingExtra="6dp"
android:layout_marginTop="18dp"
android:textColor="#99f1f1ee"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:layout_marginTop="16dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_dialog_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:paddingTop="2dp"
android:paddingBottom="2dp"
android:text="取消"
android:textSize="14.4sp"
android:textColor="#66ffffff"/>
<TextView
android:id="@+id/tv_dialog_confirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="6dp"
android:paddingTop="1dp"
android:paddingBottom="1dp"
android:text="确定"
android:textSize="14.4sp"
android:layout_marginLeft="18dp"
android:textColor="@color/colorYellow"/>
</LinearLayout>
</LinearLayout>
创建一个java类继承Dialog:
public class DialogClearCache extends Dialog {
private TextView tvDialogCancel;
private TextView tvDialogConfirm;
public DialogClearCache(@NonNull Context context) {
super(context, R.style.MyDialog); //设置风格
View view = LayoutInflater.from(context).inflate(R.layout.dialog_clear_cache_layout, null);
setContentView(view); //设置内容视图
Window window = this.getWindow();
//获取屏幕参数
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
//设置dialog屏幕居中
window.setGravity(Gravity.CENTER);
//设置宽和高(第一个参数:屏幕宽的0.83,第二参数:包裹内容)
window.setLayout((int) (displayMetrics.widthPixels * 0.83), WindowManager.LayoutParams.WRAP_CONTENT);
initView(view);
}
private void initView(View view) {
tvDialogConfirm = view.findViewById(R.id.tv_dialog_confirm);
tvDialogCancel = view.findViewById(R.id.tv_dialog_cancel);
tvDialogCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
}
/**
* 确定
* @param listener
*/
public void setOnClickDialogClearCacheConfirm(OnMultiClickListener listener){
tvDialogConfirm.setOnClickListener(listener);
}
}
style:
<resources>
<style name="MyDialog" parent="@android:style/Theme.Dialog">
<!--背景透明-->
<item name="android:windowBackground">@color/colorTransparency</item>
<!--浮在窗口上方-->
<item name="android:windowIsFloating">true</item>
<!--无标题-->
<item name="android:windowNoTitle">true</item>
<!--无边框-->
<item name="android:windowFrame">@null</item>
<item name="android:windowContentOverlay">@null</item>
<!--Dialog以外的区域模糊效果-->
<item name="android:backgroundDimEnabled">true</item>
<!--半透明-->
<item name="android:windowIsTranslucent">true</item>
<!--设置动画-->
<item name="android:windowAnimationStyle">@style/DialogAnimation</item>
</style>
<!--动画风格-->
<style name="DialogAnimation" parent="@android:style/Animation.Dialog">
<item name="android:windowEnterAnimation">@anim/anim_dialog_in</item>
<item name="android:windowExitAnimation">@anim/anim_dialog_out</item>
</style>
</resources>
进入动画:anim_dialog_in
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200"
android:fromYDelta="100%"
android:toYDelta="0">
</translate>
退出动画:anim_dialog_out
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200"
android:fromXDelta="0"
android:toXDelta="100%">
</translate>
使用:
final DialogClearCache dialog=new DialogClearCache(SettingActivity.this);
dialog.show();
dialog.setOnClickDialogClearCacheConfirm(new OnMultiClickListener() {
@Override
public void onMultiClick(View v) {
ToastUtil.showToast("清除成功");
dialog.dismiss();
}
});