分享用Activity的做Dialog样式

Dialog是我们项目中经常会用到的工具,实现它的方式也多种多样,有时为了需要我们会把Activity展示成Dialog,今天就讲一下如何用Activity写Dialog.
主要有以下几点:

  • AndroidManifest设置activity的主题
  • activity布局的设置
  • activity.class的设置
AndroidManifest设置activity的主题
android:theme=”@style/MyDialogStyle”
name="MyDialogStyle" parent="Theme.AppCompat.NoActionBar">@nulltruefalse truetrue@null@color/line_black_tran_50truefalse@style/AnimSlideBottom

activity布局的设置
我们分享的需求就是展示, 没有就隐藏,只做了微博,微信,朋友圈,QQ分享.

【分享用Activity的做Dialog样式】等会我再说为什么添加一个View->”view_virtualHeight”.
activity.class的设置
当点击这个页面时dialog就消失
@Override public boolean onTouchEvent(MotionEvent event) { this.finish(); return super.onTouchEvent(event); }

现在全面屏比较流行,但是此时虚拟按键会遮盖一部分布局,所以在activity初始化的时候判断是否有虚拟按键,根据测量的虚拟按键的高度设置View->”view_virtualHeight”.这样,虚拟按键就遮盖的是view_virtualHeight,就相当于给虚拟按键添加了一个背景色.
// 设置分享弹窗位置和宽高以及显示隐藏动画 getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); getWindow().setGravity(Gravity.BOTTOM); // 虚拟按键显示隐藏更改布局距离底部距离 getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {@Override public void onGlobalLayout() { int height = virtualHeight; virtualHeight = CommonUtils.getVirtualKeyboardHeight(ShareWbActivity.this); if (height == virtualHeight) return; LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mShareViewVirtualHeight.getLayoutParams(); params.height = virtualHeight; mShareViewVirtualHeight.setLayoutParams(params); } });

为什么添加一个View呢?其实开始并没有添加,而是设置整个跟布局的padding,但是这样有的手机的虚拟按键可能会变浅,所以就使用这种方式添加了一个背景色.
为了保证再次分享之后dialog消失
@Override protected void onResume() { super.onResume(); if (isFirst) isFirst = false; else this.finish(); }

虽然在xml中设置了动画,进来动画是指定的,但是出去的时候有的手机还是默认的那种,需要在finish()方法中添加如下设置就可以了.
@Override public void finish() { super.finish(); //注销掉activity本身的过渡动画 overridePendingTransition(0,0); }

如果想知道分享的具体问题,可以看这篇博客.Android微博,微信,QQ分享功能的实现
欢迎讨论.

    推荐阅读