自定义Dialog,从下面弹出

时间:2022-12-02 08:46:20

自定义Dialog,从下面弹出

Window window= getWindow();

只要 打开一个Activity 就有一个窗口存放这个Activity ,手机又很多个窗口,不只是一个窗口

import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.view.Display;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;
import android.widget.Toast;

public class BottomDialog extends Dialog{

    private RecyclerView rv;

    public BottomDialog(Context context) {
       // super(context);               //如果不定义style高度就会和屏幕一样高
        super(context,R.style.DialogStyle);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //内容是自定义的dialog 布局
        setContentView(R.layout.bottom_dialog);

        Window w= this.getWindow();   //这个方法表示我这个dialog对象(this) 所在的窗口
        WindowManager.LayoutParams params= w.getAttributes();
        //自己(BottomDialog) 在所在窗口的位置,两种都生效
        params.gravity= Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;

        w.setAttributes(params);
        //----------------------下面的代码加上,dialog的左右边距margin就会消失---------------------
        WindowManager m = getWindow().getWindowManager();
        Display d = m.getDefaultDisplay();

        WindowManager.LayoutParams p = getWindow().getAttributes();
        p.width = d.getWidth();
        getWindow().setAttributes(p);

        //自定义Dialog中 条目的点击事件
        TextView tv1= (TextView) findViewById(R.id.tv1);
        tv1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getContext(),"第一个被点击了",Toast.LENGTH_SHORT).show();
            }
        });
    }
}
<style name="DialogStyle" parent="android:Theme.Dialog">
        <!-- 设置背景颜色 -->
        <item name="android:windowBackground">@android:color/white</item>
        <!-- 设置边框,@null没有边框 -->
        <item name="android:windowFrame">@null</item>
        <!-- 是否覆盖窗口的内容  @null:不覆盖内容-->
        <item name="android:windowContentOverlay">@null</item>
        <!-- 设置dialog的执行动画,@null:不设置动画 -->
        <item name="android:windowAnimationStyle">@style/DialogAnimaitonStyle</item>

           <!-- 是否设置阴影 -->
        <item name="android:backgroundDimEnabled">true</item>
        <!-- 是否设置半透明的阴影效果 -->
        <item name="android:windowIsTranslucent">true</item>
        <!-- 是否去除标题 -->
        <item name="android:windowNoTitle">true</item>
        <!-- 设置触摸空白处是否会消失  false:不会 -->
        <item name="android:windowCloseOnTouchOutside">true</item>
    </style>