在Android经常会碰到各种各样的小窗口,如退出弹窗、菜单弹窗、通知弹窗等等。本文就介绍几种实现小窗口的实例,以后根据情景具体选择实现方法。
惯例,先例出大纲:
- Activity式伪弹窗
- Dialog式弹窗
- Window式弹窗
开始正文~~
1。Activity式伪弹窗
该种情况,其实就是一个Activity,我们只是通过style的作用,把内容部分显示,其他部分都透明化了。
首先,在创建一个Activity和它的布局,这方面不讲了,就一般创建活动流程;
然后,在res/values/styles.xml中添加Activity的具体style,代码及注释如下:
<style name="MyActivityStyle">
<item name="android:windowBackground">@android:color/transparent</item> <!--设置dialog的背景-->
<item name="android:windowFrame">@null</item> <!--Dialog的windowFrame框为无-->
<item name="android:windowNoTitle">true</item> <!--是否有title-->
<item name="android:windowIsFloating">true</item> <!--是否浮现在activity之上-->
<item name="android:windowIsTranslucent">true</item> <!--是否半透明-->
<item name="android:windowContentOverlay">@null</item> <!--对话框是否有遮盖,这个不设置的话,可能会出现边框黑线-->
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> <!--动画-->
<item name="android:backgroundDimEnabled">true</item> <!-- 背景是否模糊显示-->
</style>
然后,在AndroidManifest.xml中设置Activity的style:
<activity
android:name="com.wuxianxi.hunman.smallwindows.MyActivity"
android:theme="@style/MyActivityStyle" >
</activity>
最后,还要在Activity中实现点击事件,如点击空白区退出Activity,很简单:
@Override
public boolean onTouchEvent(MotionEvent event) {
//点击外围,退出窗口
this.finish();
return true;
}
到此,Activity式伪弹窗已经完成,是不是很简单~~
2。Dialog式弹窗
这里MyDialog的style,使用与上面Activity窗口一样的style, 这部分在此就不多讲了, 下面主要讲MyDialog的自定义过程。
首先,MyDialog的sytle与上面一样,不重复粘贴了。
然后,自定义MyDialog的布局文件xml, 如下:
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="280dp"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:background="@drawable/btn_style_two_normal"
android:orientation="vertical" >
<TextView
android:id="@+id/dialog_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:padding="5dp"
android:textColor="#333"
android:textSize="20sp" />
<TextView
android:id="@+id/dialog_detail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"