不知道大家有沒有一個煩惱就是自定義dialog 的時候。不是位置不對就是佈局不對。那麼如何才能夠顯示出一個合適的dialog呢。
首先 就是要定義一個style 供dialog 創建時使用。反正我當時寫style 的時候完全不知道那些屬性是幹嘛用的。所以我這裏貼出一個平時使用的style 並且註上註解,這樣大家可以瞭解下屬性配置是幹嘛用的。
<style name="info_dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<!-- 邊框 -->
<item name="android:windowIsFloating">true</item>
<!-- 是否浮現在activity之上 -->
<item name="android:windowIsTranslucent">true</item>
<!-- 半透明 -->
<item name="android:windowNoTitle">true</item>
<!-- 無標題 -->
<item name="android:windowBackground">@color/transparent</item>
<!-- 背景透明 -->
<item name="android:backgroundDimEnabled">true</item>
<!-- 模糊 -->
</style>
我着重說下 windowDimEnabled 這個屬性設置爲false 的話你 dialog 是沒有半透明背景色的。
有了一個style後 就是我們自己定義的佈局啦。佈局上跟佈局有明確的設置寬高的話。實際在dialog 顯示的時候你會發現 設置的數值和顯示的不一樣 。那麼如何能按照我們想要的寬高來顯示呢。
final Dialog dialog = new Dialog(context,theme);
View view =View.inflate(context, R.layout.dg_del_subject,null);
TextView tv_del=(TextView) view.findViewById(R.id.tv_del);
TextView tv_cancle=(TextView) view.findViewById(R.id.tv_cancle);
width=EmDpPxUtils.Dp2Px(context, width);
height=EmDpPxUtils.Dp2Px(context, height);
Window window = dialog.getWindow();
window.setBackgroundDrawable(null);// 加上這個可以避免有些系統 dialog 有黑色邊框
window.setGravity(Gravity.BOTTOM);// 控制dialog 的位置
dialog.setContentView(view, new LinearLayout.LayoutParams(
width,
height));
在setContentView 中指定 寬高 對於顯示來說是準確的。如果你的內容高度和這裏設置的高度不一致,或者說無法確定這裏設置多高的話。可以將高度改爲wrapcontent 的即可。所以要在這裏設置下。window.setGravity 則可以控制dialog顯示的位置
到這裏基本上就可以實現一個正常的。dialog 了。。。。 想怎麼show 就怎麼show 。。。