1.建类继承dialog
2.写构造方法
3.声明各类控件
4.写oncreate()
setContentView引入布局
初始化声明的控件
5.可以自定义style
6.可以申明内部接口并创建内部实例用于点击事件中,然后让外部引用者实现接口方法
7.可以重写show()方法设置dialog窗口大小位置
Dialog代码
package com.example.dialogtest01;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageButton;
public class MyDialog extends Dialog {
private Context mContext;
private ImageButton imageButtonCancel;
private Button buttonConfirm;
private String message;
private MyOnclickListener mMyOnclickListener;
public MyDialog( Context context) {
super(context);
}
public MyDialog(Context context, int themeResId) {
super(context, themeResId);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_item01);
setCanceledOnTouchOutside(false);
initView();
}
@Override
public void show() {
super.show();
WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
layoutParams.width= 1040;
layoutParams.height= 1200;
layoutParams.gravity = Gravity.TOP | Gravity.LEFT;
layoutParams.x=100;
layoutParams.y=100;
getWindow().getDecorView().setPadding(0, 0, 0, 0);
getWindow().setAttributes(layoutParams);
}
private void initView(){
imageButtonCancel=findViewById(R.id.imagebutton_cancel);
buttonConfirm=findViewById(R.id.button_confirm);
buttonConfirm.setText("自定义dialog");
buttonConfirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("测试自定义dialog的按钮点击");
mMyOnclickListener.onYesClick(message);
}
});
}
//内部接口
public interface MyOnclickListener{
public void onYesClick(String message);
}
//set内部接口和String参数
public void setMyOnclickListener(String message,MyOnclickListener myOnclickListener){
this.message=message;
this.mMyOnclickListener=myOnclickListener;
}
}
创建dialog代码
MyDialog myDialog=new MyDialog(MainActivity.this,R.style.Dialog_Msg);
myDialog.show();
style代码
<style name="Dialog_Msg" parent="android:style/Theme.Dialog">
<!--背景颜色及和透明程度-->
<item name="android:windowBackground">@android:color/white</item>
<!--是否去除标题 -->
<item name="android:windowNoTitle">true</item>
<!--是否去除边框-->
<item name="android:windowFrame">@null</item>
<!--是否浮现在activity之上-->
<item name="android:windowIsFloating">true</item>
<!--是否模糊-->
<item name="android:backgroundDimEnabled">false</item>
</style>
当然我们也可以搞dialog出现和消失的动画效果
res/values/styles:
<!-- dialog的动画-->
<style name="dialogWindowAnim" mce_bogus="1" parent="android:Animation">
<item name="android:windowEnterAnimation">@anim/animator_dialog_in</item>
<item name="android:windowExitAnimation">@anim/animator_dialog_out</item>
</style>
animator_dialog_in
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="400"
android:fromXDelta="100%"
android:toXDelta="0" />
</set>
animator_dialog_out
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="400"
android:fromXDelta="0"
android:toXDelta="-100%" />
</set>
最后在自定义的dialog的show方法中设置我们的动画