仿IOS ActionSheet控制元件從下彈出Dialog
阿新 • • 發佈:2019-01-27
使Dialog從下彈出,無非就是控制控制元件彈出的初始位置和彈出後的位置,其步驟和重寫Dialog類似,不過要重寫Dialog的預設樣式
<style name="ActionSheet" parent="@android:style/Theme.Dialog"> <item name="android:windowFrame">@null</item> <item name="android:windowIsFloating">true</item> <item name="android:windowIsTranslucent">true</item> <item name="android:windowNoTitle">true</item> <item name="android:background">@android:color/transparent</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:backgroundDimEnabled">true</item> <item name="android:windowAnimationStyle">@style/ActionSheetAnimation</item> </style>
新增彈出的動畫效果
<style name="ActionSheetAnimation" parent="@android:style/Animation.Dialog">
<item name="android:windowEnterAnimation">@anim/push_up_in</item>
<item name="android:windowExitAnimation">@anim/push_up_out</item>
</style>
收起的動畫效果
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="300" android:fromYDelta="100%p" android:toYDelta="0" />
彈出的動畫效果
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:fromYDelta="0"
android:toYDelta="100%p" />
然後載入自定義的佈局,然後設定控制元件的初始位置,如下
final Dialog dialog = new Dialog(context, R.style.ActionSheet); View view = View.inflate(context, R.layout.actionsheet, null); Window w = dialog.getWindow(); WindowManager.LayoutParams params = w.getAttributes(); params.x = 0; params.y = 0; params.gravity = Gravity.BOTTOM; dialog.onWindowAttributesChanged(params); dialog.setCanceledOnTouchOutside(true); dialog.setContentView(view); dialog.show();
然後就可以在程式碼中使用了。
下載地址: