底部弹出alertDialog,宽度匹配屏幕宽

来源:互联网 发布:长整型数java 编辑:程序博客网 时间:2024/04/28 22:16

使用Dialog作为弹框来和用户交互,从底部弹出固定在底部时,让弹出框宽度匹配屏幕宽度,使用Dialog,AlertDialog都可以实现,下面分别贴出两种方法的实现代码,先上一个效果图,如果需要宽度匹配屏幕宽度,个人建议使用Dialog.


方法一、Dialog

package com.cool.hello.alertDialog;import android.app.Dialog;import android.content.Context;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.DisplayMetrics;import android.view.Gravity;import android.view.View;import android.view.Window;import android.view.WindowManager;import com.cool.hello.R;public class DialogActivity extends AppCompatActivity {    private Dialog dialog;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_alert_dialog);        initAlertDialog();    }    private void initAlertDialog() {        if(dialog == null) {            dialog = new Dialog(this, R.style.dialog);//            dialog.setCancelable(false);            dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);            dialog.setContentView(R.layout.layout_dialog);            Window window = dialog.getWindow();            window.setGravity(Gravity.BOTTOM);            window.setWindowAnimations(R.style.AnimDialog);            WindowManager manager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);            DisplayMetrics dm = new DisplayMetrics();            manager.getDefaultDisplay().getMetrics(dm);            WindowManager.LayoutParams lp = window.getAttributes();            lp.width = dm.widthPixels;            window.setAttributes(lp);        }    }    public void show(View view) {        dialog.show();    }}
主题

R.style.dialog

    <style name="dialog" parent="android:style/Theme.Dialog">        <item name="android:windowFrame">@null</item>        <item name="android:windowNoTitle">true</item>        <item name="android:windowIsFloating">true</item>        <item name="android:windowContentOverlay">@null</item>        <item name="android:windowBackground">@color/background</item>    </style>

动画资源

R.style.AnimDialog

    <style name="AnimDialog">        <item name="android:windowEnterAnimation">@anim/dialog_enter</item>        <item name="android:windowExitAnimation">@anim/dialog_exit</item>    </style>

dialog_enter.xml

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"    android:interpolator="@android:anim/decelerate_interpolator">    <translate        android:duration="@android:integer/config_shortAnimTime"        android:fromYDelta="100%p"        android:toYDelta="0" />    <alpha        android:duration="@android:integer/config_shortAnimTime"        android:fromAlpha="0.0"        android:toAlpha="1.0" /></set>

dialog_exit.xml

<?xml version="1.0" encoding="UTF-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"    android:interpolator="@android:anim/decelerate_interpolator">    <translate        android:duration="@android:integer/config_shortAnimTime"        android:fromYDelta="0"        android:toYDelta="100%p" />    <alpha        android:duration="@android:integer/config_shortAnimTime"        android:fromAlpha="1.0"        android:toAlpha="0.0" /></set>

方式二、AlertDialog


初始化

protected AlertDialog companyDialog;    private void initAlertDialog() {        AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyAlertDialog);        View itemView = LayoutInflater.from(this).inflate(R.layout.layout_comany_list, null);        mCompanyRecyclerView = (LRecyclerView) itemView.findViewById(R.id.rv_company);        builder.setView(itemView);        companyDialog = builder.create();    }


显示

    protected void showAlertDialog() {        companyDialog.show();        Window window = companyDialog.getWindow();        WindowManager.LayoutParams params = window.getAttributes();        window.setGravity(Gravity.BOTTOM);        params.width = window.getWindowManager().getDefaultDisplay().getWidth();        window.setWindowAnimations(R.style.AnimDialog);        window.setAttributes(params);    }


主题

R.style.MyAlertDialog

    <style name="MyAlertDialog" parent="Theme.AppCompat.Light.Dialog.Alert">        <item name="android:windowFrame">@null</item><!--移除边框-->        <item name="android:windowNoTitle">true</item><!--去除顶部标题栏-->        <item name="android:windowIsTranslucent">true</item><!--窗体透明-->        <item name="android:background">@android:color/white</item><!--背景透明-->        <item name="android:windowBackground">@android:color/transparent</item><!--窗体背景透明-->        <item name="android:windowIsFloating">true</item><!--窗体是否浮动-->        <item name="android:backgroundDimEnabled">true</item><!--背景是否昏暗-->        <item name="android:backgroundDimAmount">0.6</item><!--昏暗数量-->        <item name="android:layout_marginLeft">-10dp</item>        <item name="android:layout_marginRight">-10dp</item>        <item name="android:layout_marginBottom">-3dp</item>    </style>

动画资源同上


1 0