Dialog,ActivityDialog自定义位置,大小,动画
2018-11-09 本文已影响40人
Endeav0r

Dialog样式的Activity:
首先看自定义的样式
<style name="MessageTheme">
<!--设置dialog的背景-->
<item name="android:windowBackground">@android:color/transparent</item>
<!--设置Dialog的windowFrame框为无-->
<item name="android:windowFrame">@null</item>
<!--设置无标题-->
<item name="android:windowNoTitle">true</item>
<!--是否浮现在activity之上-->
<item name="android:windowIsFloating">true</item>
<!--是否半透明-->
<item name="android:windowIsTranslucent">true</item>
<!--设置窗口内容不覆盖-->
<item name="android:windowContentOverlay">@null</item>
<!--设置动画,在这里使用让它继承系统的Animation.Dialog-->
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<!--背景是否模糊显示-->
<item name="android:backgroundDimEnabled">true</item>
</style>
Manifest中配置
<activity
android:name=".activity.MessageAcitivty"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@style/MessageTheme" />
<!--
选择性设置
android:launchMode="singleTop"
android:screenOrientation="portrait"
-->
Activity代码
public class MessageAcitivty extends Activity {
@BindView(R.id.mMsgTitle)
TextView mTitle;
@BindView(R.id.mMsgMessage)
TextView mMessage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_message_acitivty);
ButterKnife.bind(this);
int screenWidth = ScreenUtils.getScreenWidth(this);
Window window = getWindow();
window.setGravity(Gravity.CENTER);
window.getDecorView().setPadding(0, 0, 0, 0);
WindowManager.LayoutParams lp = window.getAttributes();
lp.width = (int) (screenWidth * 0.9);
lp.height = ViewGroup.LayoutParams.WRAP_CONTENT;
// 这里还可以设置lp.x,lp.y在x轴,y轴上的坐标,只是这个位置是基于Gravity的
window.setAttributes(lp);
// 业务
String msg = getIntent().getStringExtra("msg");
if (!TextUtils.isEmpty(msg))
mMessage.setText(msg);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// 业务
String msg = intent.getStringExtra("msg");
if (!TextUtils.isEmpty(msg))
mMessage.setText(msg);
}
}
layout
这里注意根布局设置的属性,如果是wrap_content显示结果在水平方向上不是完全居中的
有大神知道原因的可以留言与我交流。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
...
</LinearLayout>
普通Dialog设置:
private Dialog dialog;
private void showSearchDialog() {
if (dialog == null) {
dialog = new Dialog(this, R.style.style_dialog);
dialog.setContentView(popupView);
// dialog.setCancelable(false);
// dialog.setCanceledOnTouchOutside(false);
Window window = dialog.getWindow();
window.setGravity(Gravity.TOP);
window.setWindowAnimations(R.style.popWindowAnimation);
window.getDecorView().setPadding(0, 0, 0, 0);
WindowManager.LayoutParams lp = window.getAttributes();
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = 900;
lp.y = mToolbar.getHeight();
window.setAttributes(lp);
dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
mView.setVisibility(View.GONE);
}
});
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
mView.setVisibility(View.VISIBLE);
}
});
}
dialog.show();
}
dialog动画Style
<style name="popWindowAnimation">
<item name="android:windowEnterAnimation">@anim/pop_show</item>
<item name="android:windowExitAnimation">@anim/pop_hide</item>
</style>
pop_show.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!-- <translate
android:duration="200"
android:fromXDelta="100%p"
android:toXDelta="0" />-->
<!-- <rotate
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromDegrees="-90"
android:pivotX="100%p"
android:pivotY="0"
android:duration="300"
android:toDegrees="0" />-->
<scale
android:duration="300"
android:fromXScale="0.0"
android:fromYScale="0.0"
android:interpolator="@android:anim/decelerate_interpolator"
android:pivotX="100%p"
android:pivotY="0"
android:startOffset="0"
android:toXScale="1.0"
android:toYScale="1.0" />
<alpha
android:duration="300"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
</set>
pop_hide.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!--<translate
android:duration="200"
android:fromXDelta="0"
android:toXDelta="100%p" />-->
<scale
android:duration="300"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:interpolator="@android:anim/decelerate_interpolator"
android:pivotX="100%p"
android:pivotY="0"
android:startOffset="0"
android:toXScale="0.0"
android:toYScale="0.0" />
<alpha
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:duration="300"/>
</set>