zoukankan      html  css  js  c++  java
  • android PopupWindow

    1.构造函数

    //方法一:  
    public PopupWindow (Context context)  
    //方法二:  
    public PopupWindow(View contentView)  
    //方法三:  
    public PopupWindow(View contentView, int width, int height)  
    //方法四:  
    public PopupWindow(View contentView, int width, int height, boolean focusable)  
    

     2.显示函数

    //相对某个控件的位置(正左下方),无偏移  
    showAsDropDown(View anchor):  
    //相对某个控件的位置,有偏移;xoff表示x轴的偏移,正值表示向左,负值表示向右;yoff表示相对y轴的偏移,正值是向下,负值是向上;  
    showAsDropDown(View anchor, int xoff, int yoff):  
    //相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移  
    showAtLocation(View parent, int gravity, int x, int y):  
    

     3.其他常用函数

    public void dismiss()  //消失
    public void setFocusable(boolean focusable)  //获取焦点,点击空白处消失
    public void setTouchable(boolean touchable)  //设置PopupWindow是否响应touch事件,默认是true
    public void setOutsideTouchable(boolean touchable)  //PopupWindow以外的区域是否可点击,即如果点击PopupWindow以外的区域,PopupWindow是否会消失。
    public void setBackgroundDrawable(Drawable background)//只有设置了这个,setOutsideTouchable才有用

    全屏显示前提mPopWindow的根目录需要设置

    android:layout_width="match_parent" 
    android:layout_height="match_parent"

    使用代码

    mPopWindow = new PopupWindow(contentView,
                    ViewGroup.LayoutParams.MATCH_PARENT,
                   WindowManager.LayoutParams.MATCH_PARENT,
                    true);
    

    popwinodw显示的时候设置背景透明度

     public void backgroundAlpha(float bgAlpha)
        {
            WindowManager.LayoutParams lp = getWindow().getAttributes();
            lp.alpha = bgAlpha; //0.0-1.0
            getWindow().setAttributes(lp);
        }
    

     popwinodw show之前设置

    backgroundAlpha(0.5f);
    

     这样的话消失的时候背景透明度是不变的,这个显然和我们的想法是相悖的,所以需要设置监听

    mPopWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
                @Override
                public void onDismiss() {
                    backgroundAlpha(1f);
                }
            });
    

    popwinodw代码:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clipToPadding="true"
        android:fitsSystemWindows="true"
        android:gravity="center">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="150dp"
            android:layout_marginLeft="24dp"
            android:layout_marginRight="24dp"
            android:background="@drawable/corner5"
            android:orientation="vertical">
    
            <LinearLayout
                android:id="@+id/computer"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center_vertical"
                android:orientation="horizontal">
    
                <ImageView
                    android:layout_width="22dp"
                    android:layout_height="22dp"
                    android:layout_marginLeft="24dp"
                    android:src="@drawable/ic_launcher" />
    
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="24dp"
                    android:text="计算机"
                    android:textColor="#505050"
                    android:textSize="16sp" />
            </LinearLayout>
    
            <View
                android:layout_width="match_parent"
                android:layout_height="1px"
                android:background="#d6d6d6" />
    
            <LinearLayout
                android:id="@+id/network"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center_vertical"
                android:orientation="horizontal">
    
                <ImageView
                    android:layout_width="22dp"
                    android:layout_height="22dp"
                    android:layout_marginLeft="24dp"
                    android:src="@drawable/ic_launcher" />
    
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="24dp"
                    android:text="网络"
                    android:textColor="#505050"
                    android:textSize="16sp" />
            </LinearLayout>
    
            <View
                android:layout_width="match_parent"
                android:layout_height="1px"
                android:background="#d6d6d6" />
    
            <LinearLayout
                android:id="@+id/popWindowDismiss"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center_vertical"
                android:orientation="horizontal">
    
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="24dp"
                    android:text="取消"
                    android:textColor="#d6d6d6"
                    android:textSize="16sp" />
            </LinearLayout>
        </LinearLayout>
    </RelativeLayout>
    

    居中显示PopWindow效果图

    代码

    private void showPopupWindow() {
            //设置contentView
            View contentView = LayoutInflater.from(CustomActivity.this).inflate(R.layout.popwindow_change, null);
            mPopWindow = new PopupWindow(contentView,
                    ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);
    
    //        mPopWindow = new PopupWindow(contentView,
    //                ViewGroup.LayoutParams.MATCH_PARENT,
    //                WindowManager.LayoutParams.MATCH_PARENT,
    //                true);
            mPopWindow.setFocusable(true);
            mPopWindow.setBackgroundDrawable(new BitmapDrawable());
            backgroundAlpha(0.5f);
            mPopWindow.setContentView(contentView);
            //设置各个控件的点击响应
            LinearLayout tv1 = (LinearLayout)contentView.findViewById(R.id.computer);
            LinearLayout tv2 = (LinearLayout)contentView.findViewById(R.id.network);
            LinearLayout tv3 = (LinearLayout)contentView.findViewById(R.id.popWindowDismiss);
            tv1.setOnClickListener(this);
            tv2.setOnClickListener(this);
            tv3.setOnClickListener(this);
            //显示PopupWindow rootview是当前Activity的view
            View rootview = LayoutInflater.from(CustomActivity.this).inflate(R.layout.activity_custom, null);
            mPopWindow.showAtLocation(rootview, Gravity.CENTER, 0, 0);
            mPopWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
                @Override
                public void onDismiss() {
                    backgroundAlpha(1f);
                }
            });
    
        }
    

     从底部显示效果图:

    代码:

     剧中显示代码改一句话

    mPopWindow.showAtLocation(rootview, Gravity.BOTTOM, 0, 0);
    
  • 相关阅读:
    Dao跨事务调用实现转账功能
    QueryRunner类 的應用,以及ResultSetHandler 接口的实现类
    C3P0数据源的使用
    iOS中UI阶段常用的一些方法
    谷歌云服务器的使用
    Odoo学习之domain表达式【转载】
    odoo 视图继承
    Odoo字段类型详解
    odoo12:命令行
    xpath转义‘
  • 原文地址:https://www.cnblogs.com/hualuoshuijia/p/6943759.html
Copyright © 2011-2022 走看看