這兩天練習一個項目 顯示對話框類似於QQ發表說說,寬是充滿屏幕的 並且有上下的顯示隱藏動畫 但是AlertDialog默認顯示模式是有邊距的 用了很多方法怎麼也消除不了AlertDialog的邊距 如下圖這樣
後來選擇使用Dialog消除了默認邊距的效果 經過修改最終效果如下圖
代碼開始 注意是dialog 不是AlertDialog
動畫效果 在res下創建anim文件
顯示時候的動畫
<translate
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:fromXDelta="0"
android:fromYDelta="80%p"
android:toXDelta="0"
android:toYDelta="0">
>
</translate>
隱藏時的動畫
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="400"
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="0"
android:toYDelta="100%p">
>
</translate>
在valuses創建style.xml
<resources>
//加入顯示和隱藏動畫
<style name="dialogWindowAnim" mce_bogus="1" parent="android:Animation">
<item name="android:windowEnterAnimation">@anim/dialog_in</item>
<item name="android:windowExitAnimation">@anim/dialog_out</item>
</style>
//消除邊距和黑邊框
<style name="ActionSheetDialogStyle" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:background">@null</item>
<item name="android:windowNoTitle">true</item>
</style>
</resources>
代碼
//創建dialog時加入消除邊距和黑邊框的style
Dialog dialog = new Dialog(this, R.style.ActionSheetDialogStyle);
//自定義佈局
View view = View.inflate(this, R.layout.dialog_caogao, null);
dialog.setContentView(view);
//獲取當前Activity所在的窗體
Window dialogWindow = dialog.getWindow();
//設置Dialog從窗體底部彈出
dialogWindow.setGravity(Gravity.BOTTOM);
dialogWindow.getDecorView().setPadding(0, 0, 0, 0);
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
//設置寬
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
//設置高
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
dialogWindow.setAttributes(lp);
//顯示對話框
dialogWindow.setGravity(Gravity.BOTTOM);
//設置dialog的動畫效果
dialogWindow.setWindowAnimations(R.style.dialogWindowAnim);
dialog.show();