DialogFragment 如何设置底部半屏幕的style
时间: 2024-04-29 22:22:31 浏览: 201
使用Fragment实现底部菜单的切换
5星 · 资源好评率100%
可以通过设置DialogFragment的样式来实现底部半屏幕的效果。具体做法如下:
1.在styles.xml文件中添加样式:
```xml
<style name="BottomDialog" parent="Theme.AppCompat.Light.Dialog">
<item name="android:windowIsFloating">false</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowAnimationStyle">@style/BottomDialogAnimation</item>
<item name="android:windowSoftInputMode">stateAlwaysHidden|adjustResize</item>
<item name="android:backgroundDimEnabled">true</item>
</style>
<style name="BottomDialogAnimation">
<item name="android:windowEnterAnimation">@anim/dialog_slide_in_bottom</item>
<item name="android:windowExitAnimation">@anim/dialog_slide_out_bottom</item>
</style>
```
其中,android:windowIsFloating设置为false,使DialogFragment全屏幕显示;android:windowBackground设置为透明,以便在DialogFragment周围创建一个半透明的背景;android:windowAnimationStyle设置为自定义的BottomDialogAnimation样式,用来设置DialogFragment的进入和退出动画。
2.在anim目录下添加dialog_slide_in_bottom.xml和dialog_slide_out_bottom.xml动画文件。这里我们使用了valueAnimator来实现动画效果。
dialog_slide_in_bottom.xml文件内容如下:
```xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:propertyName="translationY"
android:valueFrom="800"
android:valueTo="0"
android:duration="500"
android:interpolator="@android:interpolator/decelerate_cubic"
/>
</set>
```
dialog_slide_out_bottom.xml文件内容如下:
```xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:propertyName="translationY"
android:valueFrom="0"
android:valueTo="800"
android:duration="500"
android:interpolator="@android:interpolator/decelerate_cubic"
/>
</set>
```
3.在DialogFragment的onCreateView方法中设置样式:
```java
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_dialog, container, false);
//设置样式
if (getDialog() != null) {
getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
getDialog().getWindow().setWindowAnimations(R.style.BottomDialog);
}
return view;
}
```
其中,getDialog().getWindow().setWindowAnimations设置为我们刚刚定义的BottomDialog样式,用来设置进入和退出动画。
这样就可以实现一个底部半屏幕的DialogFragment了。
阅读全文