Android 自定義Dialog小結
阿新 • • 發佈:2018-11-21
關於自定義佈局的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
後續再繼續新增……