基本使用
- 创建builder
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.myAlertDialog);
- 创建并注入view
View view = LayoutInflater.from(this).inflate(R.layout.dialog_note_color_tips, null);
builder.setView(view);
…
对view进行操作
…
- 展示
AlertDialog dialog= builder.create();
dialog .show
升级用法
- 添加弹框位置设置
在show之后调用
Window dialogWindow = mNotesColorTipsDialog.getWindow();
dialogWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
lp.gravity = Gravity.CENTER;
lp.width = 400;
dialogWindow.setAttributes(lp);
-增加动画
dialogWindow.setWindowAnimations(R.style.dialogWindowAnimUp);
整体代码如下:
if (mNotesColorTipsDialog == null) {
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.myAlertDialog);
View view = LayoutInflater.from(this).inflate(R.layout.dialog_note_color_tips, null);
builder.setView(view);
builder.setCancelable(false);
mNotesColorTipsDialog = builder.create();
Button button = view.findViewById(R.id.btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mNotesColorTipsDialog.dismiss();
}
});
checkBox = view.findViewById(R.id.cb);
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
SharedPreferencesHelper.getSpInstance(mContext).put(Constants.NOTE_COLOR_TIP_SHOW, !isChecked);
if (isChecked) {
checkBox.setTextColor(getResources().getColor(R.color.purple));
} else {
checkBox.setTextColor(getResources().getColor(R.color.gray));
}
}
});
}
checkBox.setChecked(!show);
mNotesColorTipsDialog.show();
Window dialogWindow = mNotesColorTipsDialog.getWindow();
dialogWindow.setWindowAnimations(R.style.dialogWindowAnimUp);
dialogWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
lp.gravity = Gravity.CENTER;
lp.width = 400;
dialogWindow.setAttributes(lp);
动画增加插值器
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/anticipate_interpolator">
<translate
android:duration="1000"
android:fromYDelta="0"
android:toYDelta="-100%" />
</set>
几个插值器的介绍:
java类 | xml资源id | 说明 |
---|---|---|
AccelerateDecelerateInterpolator | @android:anim/accelerate_decelerate_interpolator | 其变化开始和结束速率较慢,中间加速 |
AccelerateInterpolator | @android:anim/accelerate_interpolator | 其变化开始速率较慢,后面加速 |
DecelerateInterpolator | @android:anim/decelerate_interpolator | 其变化开始速率较快,后面减速 |
LinearInterpolator | @android:anim/linear_interpolator | 其变化速率恒定 |
AnticipateInterpolator | @android:anim/anticipate_interpolator | 其变化开始向后甩,然后向前 |
AnticipateOvershootInterpolator | @android:anim/anticipate_overshoot_interpolator | 其变化开始向后甩,然后向前甩,过冲到目标值,最后又回到了终值 |
OvershootInterpolator | @android:anim/overshoot_interpolator | 其变化开始向前甩,过冲到目标值,最后又回到了终值 |
BounceInterpolator | @android:anim/bounce_interpolator | 其变化在结束时反弹 |
CycleInterpolator | @android:anim/cycle_interpolator | 循环播放,其速率为正弦曲线 |
TimeInterpolator | 一个接口,可以自定义插值器 |
两步实现弹框圆角透明背景
- 设置透明样式,创建时传入即可实现透明背景
<style name="myAlertDialog" parent="Theme.MaterialComponents.Dialog.Alert">
<item name="android:background">@android:color/transparent</item>
</style>
- 然后在布局文件里添加圆角背景
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:background="@drawable/bg_corner"//设置圆角背景
android:layout_width="match_parent"
android:gravity="center"
android:layout_height="wrap_content">