底部彈出alertDialog,寬度匹配屏幕寬

使用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>

動畫資源同上


發佈了45 篇原創文章 · 獲贊 3 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章