1. 程式人生 > >Android 自定義Dialog小結

Android 自定義Dialog小結

關於自定義佈局的Dialog,總是會遇到各種各樣的問題,作為一個菜鳥,想想還是打算專門開一篇總結自己遇到的各種問題。歡迎大佬們指點

自定義佈局寬度和位置問題

自定義佈局,就是自己自由地設定Dialog的樣式,所以肯定會自己寫一個Layout佈局,並把它加載出來,這才是我們想要的,但是經常會出現,明明我寫的佈局寬度是MatchParent的,但是顯示出來各種不是。或者我想讓它從底部彈出無法實現等等。

先上效果圖:

這種問題,統一可以參考下面的程式碼實現


    LayoutInflater inflater = LayoutInflater.from(this);
    View view = inflater.inflate(R.layout.dialog_share2_layout, null);
    //這裡的R.id.show_main就是我的佈局,最外面的LinearLayout
    LinearLayout showMain = (LinearLayout) view.findViewById(R.id.show_main);

    

    //建立自定義樣式的Dialog
    mShareDialog = new Dialog(this, R.style.invitation_dialog);

    //拿到Dialog的Window, 修改Window的屬性
    Window window = mShareDialog.getWindow();

    //這個能讓佈局寬度填滿螢幕
    window.getDecorView().setPadding(0,0,0,0);

    // 獲取Window的LayoutParams
    WindowManager.LayoutParams layoutParams = window.getAttributes();
    layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;

    //對話方塊放底部
    layoutParams.gravity = Gravity.BOTTOM;
    window.setAttributes(layoutParams);

    mShareDialog.setCancelable(true);

    //最後才載入自定義佈局
    mShareDialog.setContentView(showMain);

在 res / values / styles.xml 檔案中新增 dialog 的主題(這樣可以避免出現黑色背景或者頂部有黑色區域)

 <!-- 自定義介面選單dialog -->
    <style name="invitation_dialog" parent="android:Theme.Dialog">
        <!-- 設定dialog的背景 -->
        <item name="android:windowBackground">@android:color/transparent</item>
        <!-- 是否顯示title -->
        <item name="android:windowNoTitle">true</item>
        <!-- 是否半透明 -->
        <item name="android:windowIsTranslucent">true</item>
        <!-- 是否浮現在activity之上 -->
        <item name="android:windowIsFloating">true</item>
        <!-- 也是個drawable,定義contentoverlay的背景 -->
        <item name="android:windowContentOverlay">@null</item>
        <!-- 背景是否模糊顯示 -->
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:windowFrame">@null</item> <!-- Dialog的windowFrame框為無 -->
    </style>

 

推薦兩篇文章:自定義Dialog的寬度充滿螢幕的方法      自定義Dialog之底部彈出Dialog

後續再繼續新增……