• popupwindows


    <1>.能够点击popupwindow 内部空间,外部触摸消失,外部点击事件。

    package myapplication.com.myapplication;
    
    import android.content.Context;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.Display;
    import android.view.Gravity;
    import android.view.MotionEvent;
    import android.view.View;
    import android.widget.PopupWindow;
    import android.widget.TextView;
    import android.widget.Toast;
    
    
    public class MainActivity extends AppCompatActivity implements PopupWindow.OnDismissListener {
    
        TextView textView_type;
        int state = 0;
        PopupWindow pop;
        View layout;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            textView_type = (TextView) findViewById(R.id.click);
            popshop();
            //  popupwindows 外部的点击事件
            TextView textView = (TextView) findViewById(R.id.text);
            textView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(MainActivity.this, "外部点击", Toast.LENGTH_SHORT).show();
                }
            });
    
    
        }
    
    
        private void popshop() {
            // textView_type= (TextView) view.findViewById(R.id.type_textview);
            // mClassifyPopupWindow.showAtLocation(getActivity().
            // findViewById(R.id.main), Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);
    
    
            textView_type.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    if (state == 1 && pop.isShowing()) {
                        state = 0;
                        pop.dismiss();
                    } else {
                        /*** 弹出自定义的菜单 ***/
                        int height;
                        Display defaultDisplay = getWindowManager().getDefaultDisplay();
                        height = defaultDisplay.getHeight() / 10 * 7;
                        layout = View.inflate(MainActivity.this, R.layout.popwindow_layout, null);
                        //popweindows 里面可点击
                        TextView pop_textview1 = (TextView) layout.findViewById(R.id.pop_textview1);
                        pop_textview1.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                pop.dismiss();
                            }
                        });
                        pop = new PopupWindow(layout, defaultDisplay.getWidth(),
                                height);
                        // ColorDrawable cd = new ColorDrawable(-0000);
                        //  pop.setBackgroundDrawable(cd);
                        // pop.showAsDropDown(v);
    
                        pop.update();
                        pop.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);
                        pop.setTouchable(true);        // 设置popupwindow可点击
                        pop.setOutsideTouchable(true); // 设置popupwindow外部可点击
                        //  pop.setFocusable(true);    // 获取焦点 这时外部不可点击触摸
                        /* 设置popupwindow的位置 */
                        pop.showAtLocation(layout,
                                (Gravity.BOTTOM - textView_type.getHeight())
                                        | Gravity.LEFT, 0, 2 * textView_type.getHeight());
                        state = 1;
                        pop.setTouchInterceptor(new View.OnTouchListener() {
                            public boolean onTouch(View v, MotionEvent event) {
    
                                if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
                                    pop.dismiss();
                                    return true;
                                }
                                return false;
                            }
    
                        });
    
    
                    }
                }
            });
    
        }
    
        @Override
        public void onDismiss() {
            pop.dismiss();
    
        }
    
        @Override
        public boolean onTouchEvent(MotionEvent event) {
    // TODO Auto-generated method stub
    
            if (pop != null && pop.isShowing()) {
    
                pop.dismiss();
    
                pop = null;
    
            }
    
            return super.onTouchEvent(event);
    
        }
    
    }

    <2>.Mainacitivty.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="myapplication.com.myapplication.MainActivity">
    
        <TextView
            android:id="@+id/click"
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:text="点击弹出PopWindows" />
    
        <TextView
            android:id="@+id/text"
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:text="pop弹出时仍能点击" />
    </LinearLayout>

    <3>. popwindow_layout

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#ffff5555"
    
        android:orientation="vertical">
        <TextView
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:text="popwindows内部点击事件"
            android:id="@+id/pop_textview1"
            android:textSize="22dp"
            android:gravity="center_horizontal"/>
        <View
            android:layout_height="2dp"
            android:layout_marginTop="5dp"
            android:layout_width="match_parent"
            android:background="#000000"
    
            />
    
          <myapplication.com.myapplication.XCFlowLayout
                android:id="@+id/flowlayout"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent" >
    
             </myapplication.com.myapplication.XCFlowLayout>
    
    
    </LinearLayout>

     <4> 自定义菜单栏

    pop的布局:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#6e6e6e"
        android:orientation="vertical">
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="140dp"
            android:layout_height="40dp"
            android:drawableLeft="@mipmap/yun"
            android:gravity="center_horizontal|center_vertical"
            android:text="菜单"
            android:textColor="#000000"
            android:textSize="17sp" />
    
        <TextView
            android:id="@+id/textView2"
            android:layout_width="140dp"
            android:layout_height="40dp"
            android:drawableLeft="@mipmap/yun"
            android:gravity="center_horizontal|center_vertical"
            android:text="收藏"
            android:textColor="#000000"
            android:textSize="17sp" />
    
        <TextView
            android:id="@+id/textView3"
            android:layout_width="140dp"
            android:layout_height="40dp"
            android:drawableLeft="@mipmap/yun"
            android:gravity="center_horizontal|center_vertical"
            android:text="爱好"
            android:textColor="#000000"
            android:textSize="17sp" />
    </LinearLayout>
    View Code

    方法实现:

      /**
         *
         * @param view  view点击事件,弹出popupwindow,view传入作为参数
         */
        private void showPopupWindow_dingbu(View view) {
    
            /**
             * 一个自定义的布局,作为显示的内容
             */
    
            View contentView = LayoutInflater.from(MainActivity.this).inflate(R.layout.pop_layout, null);
    
            final PopupWindow popupWindow = new PopupWindow(contentView,
                    LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, true);
            WindowManager manager=(WindowManager) getSystemService(Context.WINDOW_SERVICE);
            popupWindow.setTouchable(true);
            popupWindow.setBackgroundDrawable(new BitmapDrawable());
            popupWindow.setOutsideTouchable(true);
            int xpos=manager.getDefaultDisplay().getWidth()/2-popupWindow.getWidth()/2;
    
            TextView textView3 = (TextView) contentView.findViewById(R.id.textView1);
            /**
             * 设置按钮的点击事件
             */
            textView3.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(MainActivity.this,"ok",Toast.LENGTH_SHORT).show();
                    popupWindow.dismiss();
                }
            });
    
    
    
    
            popupWindow.setTouchInterceptor(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    return false;
                    // 这里如果返回true的话,touch事件将被拦截
                    // 拦截后 PopupWindow的onTouchEvent不被调用,这样点击外部区域无法dismiss
                }
            });
    
            popupWindow.showAtLocation(view, Gravity.TOP|Gravity.RIGHT, 0, 140);  //右下
            popupWindow.showAsDropDown(view);
        }
    今天多一点积累,明天少一分烦恼
  • 相关阅读:
    sql学习笔记
    正则表达式30分钟入门教程(转) 收藏
    学习Javascript闭包(Closure)
    Bug等级规范
    下载1G的东西用1M网速理论上要用多长时间?
    C#多线程学习(四) 多线程的自动管理(线程池)
    JS调用WebServers
    北京软件公司排名
    Js调用WebServices
    C#多线程学习(三) 生产者和消费者
  • 原文地址:https://www.cnblogs.com/galibujianbusana/p/5956275.html
Copyright © 2020-2023  润新知