需求:弹出一个带自定义动画的dialog对话框
核心代码:
public class MainActivity extends AppCompatActivity {
private Button btn_determine;
private Button btn_cancel;
private AlertDialog dlg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/**
* 单击手机返回按钮,启动对话框
*
* @param keyCode
* @param event
* @return
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
//判断如果单击了返回按钮
if (keyCode == KeyEvent.KEYCODE_BACK) {
//创建对话框实例
dlg = new AlertDialog.Builder(this).create();
dlg.show();//显示对话框
Window window = dlg.getWindow();//对话框窗口
window.setGravity(Gravity.CENTER);//设置对话框显示在屏幕中间
window.setWindowAnimations(R.style.dialog_style);//添加动画
window.setContentView(R.layout.dialog_layout);//设置对话框的布局文件
//获取对话框确定和取消按钮
btn_determine = window.findViewById(R.id.btn_determine);
btn_cancel = window.findViewById(R.id.btn_cancel);
initEvent();//初始化事件
}
return super.onKeyDown(keyCode, event);
}
private void initEvent() {
//确定
btn_determine.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dlg.dismiss();//关闭对话框
finish();//退出当前界面
}
});
//取消
btn_cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dlg.dismiss();//关闭对话框
}
});
}
}
R.layout.dialog_layout文件:
<?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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical">
<!--dialog标题-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="20dp"
android:text="@string/dialog_text_title"
android:textColor="@color/black"
android:textSize="16sp"/>
<!--dialog 提示文字-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="50dp"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:paddingTop="20dp"
android:text="@string/dialog_text_message"
android:textColor="@color/blue"
android:textSize="20sp"/>
<!--线-->
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/yellow"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<!--确定按钮-->
<Button
android:id="@+id/btn_determine"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@null"
android:text="确定"
android:textColor="@color/orange"
android:textSize="20sp"/>
<!--线-->
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="@color/yellow"/>
<Button
android:id="@+id/btn_cancel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@null"
android:text="取消"
android:textColor="@color/orange"
android:textSize="20sp"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
R.style.dialog_style文件:
<!--自定义对话框样式-->
<style name="dialog_style" parent="android:Animation">
<!--进入时的动画-->
<item name="android:windowEnterAnimation">@anim/dialog_enter</item>
<!--退出时的动画-->
<item name="android:windowExitAnimation">@anim/dialog_exit</item>
</style>
anim/dialog_enter文件:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!--从上部进入到中间-->
<translate
android:duration="200"
android:fromYDelta="-100%">
</translate>
</set>
anim/dialog_exit文件:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!--从中间到底部退出-->
<translate
android:duration="200"
android:fromYDelta="0"
android:toYDelta="100%">
</translate>
</set>
效果图: