自訂Dialog寬度佔滿螢幕,dialog寬度
一、自訂Dialog繼承Dialog
public class MyDialog extends Dialog {
二、為Dialog設定樣式
在style中建立新樣式繼承
@android:style/Theme.Dialog或者@android:style/Theme.Holo.Dialog
- 設定樣式去掉邊框
- 去掉標題
- 設定視窗透明
- 設定點擊對話方塊外邊可以消失等
- 設定動畫
<!-- <style name="MyDialog" parent="@android:style/Theme.Dialog">--> <style name="MyDialog" parent="@android:style/Theme.Holo.Dialog"> <!-- 是否有邊框 --> <item name="android:windowFrame">@null</item> <!--是否在懸浮Activity之上 --> <item name="android:windowIsFloating">true</item> <!--標題 --> <item name="android:windowNoTitle">true</item> <!--陰影 --> <item name="android:windowIsTranslucent">true</item><!--半透明--> <!-- 進入和退出的動畫 --> <item name="android:windowAnimationStyle">@style/MyDialogAnimation</item> <!-- 點外邊可以消失 --> <item name="android:windowCloseOnTouchOutside">true</item> </style> <style name="MyDialogAnimation"> <!--進入 --> <item name="android:windowEnterAnimation">@anim/dialog_enter</item> <!--退出--> <item name="android:windowExitAnimation">@anim/dialog_exit</item> </style>
進入動畫
dialog_enter
dialog_exit
系統內建的可以找到直接拿來用在SDK下找到
目錄\sdk\platforms\對應的API版本
<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false" > <scale android:fromXScale="0.9" android:toXScale="1.0" android:fromYScale="0.9" android:toYScale="1.0" android:pivotX="50%" android:pivotY="50%" android:duration="200" /> <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="200" /> </set>
退出
<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <scale android:duration="200" android:fromXScale="1.0" android:fromYScale="1.0" android:pivotX="50%" android:pivotY="50%" android:toXScale="0.9" android:toYScale="0.9"/> <alpha android:duration="200" android:fromAlpha="1.0" android:toAlpha="0.0"/></set>
三、在構造方法中設定樣式
Context mContext; public MyDialog(Context context) { super(context, R.style.MyDialog); this.mContext=context; }
四、設定布局
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_dialog); }
布局檔案就是2個TextView
五、重寫show方法,設定寬度,高度等
@Override public void show() { super.show(); /** * 設定寬度全屏,要設定在show的後面 */ LayoutParams layoutParams = getWindow().getAttributes(); layoutParams.gravity=Gravity.BOTTOM; layoutParams.width= LayoutParams.MATCH_PARENT; layoutParams.height= LayoutParams.WRAP_CONTENT; getWindow().getDecorView().setPadding(0, 0, 0, 0); getWindow().setAttributes(layoutParams); }
六、完整Dialog類
/** * Dialog 2016年7月30日 */public class MyDialog extends Dialog { Context mContext; public MyDialog(Context context) { super(context, R.style.MyDialog); this.mContext=context; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_dialog); } @Override public void show() { super.show(); /** * 設定寬度全屏,要設定在show的後面 */ LayoutParams layoutParams = getWindow().getAttributes(); layoutParams.gravity=Gravity.BOTTOM; layoutParams.width= LayoutParams.MATCH_PARENT; layoutParams.height= LayoutParams.WRAP_CONTENT; getWindow().getDecorView().setPadding(0, 0, 0, 0); getWindow().setAttributes(layoutParams); } }