popupWindow的使用

前言

好久没有更新自己的博客了,这周在项目中有应用到,当服务端崩溃的时候,弹出Tips框,弹出后用户点击
Tip 框之外的区域要使得Tips消失,需求很简单,实现方式也有多种,这里借用该机会也学习使用一下popwindow。

简要介绍 ##

PopupWindow就是弹出窗口的意思,类似windows7电脑下面的开始按钮弹出的框。PopupWindow可以实现浮层效果,而且可以自定义显示位置,出现和退出时的动画。

使用方法

一、为popupwindow创建布局 ###

本人这里创建的布局文件名为shutdown_tip_popupwindow.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/bg_homepage_watch_sync_tip"
    android:orientation="vertical">
    <TextView
        android:id="@+id/shutdown_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="奔溃提示" />

    <TextView
        android:id="@+id/watch_sync_tip_sub_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:lineSpacingExtra="10dp"
        android:text="引起奔溃的主要原因如下:"
        android:textColor="@color/color_watch_sync_tip_sub_title"
        android:textSize="25dp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:orientation="horizontal">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:layout_marginTop="10dp"
            android:background="@drawable/shape_watch_sync_tip" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:lineSpacingExtra="10dp"
            android:text="提示1..."
            android:textColor="@color/color_watch_sync_tip_content"
            android:textSize="25dp" />
    LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:orientation="horizontal">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:layout_marginTop="10dp"
            android:background="@drawable/shape_watch_sync_tip" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:lineSpacingExtra="10dp"
            android:text="提示2..."
            android:textColor="#000000"
            android:textSize="25dp" />
    LinearLayout>
LinearLayout>

二、函数中初始化调用

//初始化两个变量
  private PopupWindow popupWindow;
  private View view_popupWindow;
  private void showWindow(View parent) {
        if (popupWindow == null) {
 //  由于这里是在fragment中调用getSystemService,所以先在onAttach()里面给homepageActivity赋值
 /* public void onAttach(Context context) {
        super.onAttach(context);
        homepageActivity=(HomepageActivity) getActivity();
    }*/
            LayoutInflater layoutInflater = (LayoutInflater)homepageActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view_popupWindow = layoutInflater.inflate(R.layout.shutdown_tip_popupwindow, null);
 //此处是为了获取布局中的参数,方便设置popupwindow窗口的大小
            LinearLayout.LayoutParams params = ( LinearLayout.LayoutParams)view_popupWindow.getLayoutParams(); 
 //创建popupwindow,设置其大小为适合内容                 
            popupWindow = new PopupWindow(view_popupWindow, params.WRAP_CONTENT, params.WRAP_CONTENT);
        }
        popupWindow.setFocusable(true);
        // 设置允许在外点击消失
        popupWindow.setBackgroundDrawable(new BitmapDrawable());
        popupWindow.setOutsideTouchable(true);
        WindowManager windowManager = (WindowManager)homepageActivity.getSystemService(Context.WINDOW_SERVICE);
        int xPos = windowManager.getDefaultDisplay().getWidth() / 2
                - popupWindow.getWidth() / 2;
        popupWindow.showAsDropDown(parent, xPos, 0);
    }

总结

popupwindow使用起来还是很简单的,在完成上述代码编写后,在合适位置调用函数即可实现,其实在布局文件中还可以添加ListView等,也可以为他们设置点击监听,所以说popupwindow本身确实是很强大的,值得mark一下,为我自己的小菜成长之路积累一下。

你可能感兴趣的:(工作学习)