Android 自定义dialog步骤

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方法中设置我们的动画

猜你喜欢

转载自blog.csdn.net/yh18668197127/article/details/84982630