[原創(chuàng)] Android dialog遇到的問(wèn)題和dialog工具類

在帶屏煙機(jī)項(xiàng)目中,遇到了自定義Dialog的使用場(chǎng)景
在之前的dialog的使用過(guò)程中遇到了一些問(wèn)題,比如圓角的背景,但是又不能使用背景圖片,或者使用了背景圖片也不能圓角的問(wèn)題.問(wèn)題還真多.
這次遇到的問(wèn)題是自定義布局,出來(lái)之后上面有一塊空白.高寬度定義問(wèn)題

首先看下設(shè)計(jì)圖:


原型圖

明顯是要使用自定義的Dialog
好的,寫好XML,運(yùn)行預(yù)覽


問(wèn)題界面

出現(xiàn)了問(wèn)題
1.雖然在XML 中寫好了高寬度,但是完全是不起作用的,直接給我全屏了.
2.頂部有部分空白?不知道哪里來(lái)的.

經(jīng)過(guò)各種Google,發(fā)現(xiàn)高寬度必須要通過(guò) window 對(duì)象的layoutparam 來(lái)修改
頂部空白是因?yàn)镈ialog中默認(rèn)會(huì)有Title,開(kāi)始得到的解決方案是自定義繼承AlertDialog,但是這個(gè)代價(jià)有點(diǎn)大哦,后來(lái)才找到正確的解決方案

解決方案

  1. Window dialogWindow = dialog.getWindow();
     WindowManager.LayoutParams lp = dialogWindow.getAttributes();
     lp.width = Utils.dip2px(context, realWidth); // 寬度
     lp.height = Utils.dip2px(context, realHeight); // 高度
     dialogWindow.setAttributes(lp);(必須要加上這句才行)
    

這里需要注意的是lp.width 和lp.height 就是高寬度,這里接收的是px 值,不是dp,不是dp,不是dp,重要的事情說(shuō)三遍,記住代碼里面只人px ,這里我們知道了dp值,可以通過(guò)工具類轉(zhuǎn)換出真正的px 值

  1. Dialog dialog = new Dialog(context);
     dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
     dialog.setContentView(view);
    

在setContentView 之前,設(shè)置 dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
或者給dialog 設(shè)置style


設(shè)置style

3.另外說(shuō)下最開(kāi)始提到的問(wèn)題的解決方案(圓角背景等等)
圓角背景首先需要讓linerlayout(或者其他布局)圓角,我們可以自定義shape ,使用xml 畫(huà)圓角,之后,(重點(diǎn))我們需要自定義style ,可參照上圖,設(shè)置透明的背景,這樣就可以實(shí)現(xiàn)圓角的背景(非常漂亮哦)

4.還有個(gè)奇葩問(wèn)題是,有些時(shí)候底部布局的margin和pading 都不會(huì)起作用(懷疑是自定義Style 引起的),這時(shí)候,可以在底部放置一個(gè)固定高度的View 即可

在項(xiàng)目中,這樣的dialog 還是很多的,所以想到可以制作工具類.以下是原創(chuàng)工具類


DialogUtils

傳入context ,自定義的View,dp 寬度,dp 高度,dialog 是否可以取消,取消的回調(diào)就可以了,如果不需要取消的回調(diào),直接傳入null 即可,這樣就可以簡(jiǎn)易的使用自定義View 的dialog 啦

使用方法如下:


使用方法
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容