`
阅读更多
private void iniPopUpWindow()
    {
        final String[] s=new String[]{"设置","均衡器","意见反馈 ","皮肤选择","本地扫描","流量控制","定时音乐","退出"};
        View popview = getLayoutInflater().inflate(R.layout.popupwindow, null);
        View emptyview = (View) popview.findViewById(R.id.view1);
        GridView gridView = (GridView) popview.findViewById(R.id.gridView1);
        //如果设置的 是空白的emptyview.setOnClickListener()不起作用,.......
        //设置的是popview.setOnClickListener()则起作用
        popview.setOnClickListener(new OnClickListener()
        {
           
            @Override
            public void onClick(View v)
            {
               popupWindow.dismiss();               
            }
        });
        gridView.setAdapter(new BaseAdapter()
        {
           
            @Override
            public View getView(int position, View convertView, ViewGroup parent)
            {
                convertView= getLayoutInflater().inflate(R.layout.item_popup, null);
                TextView text = (TextView) convertView.findViewById(R.id.textView1);
                ImageView image = (ImageView) convertView.findViewById(R.id.imageView1);
                text.setText(s[position]);
                return convertView;
            }
           
            @Override
            public long getItemId(int position)
            {
                return 0;
            }
           
            @Override
            public Object getItem(int position)
            {
                return null;
            }
           
            @Override
            public int getCount()
            {
                // TODO Auto-generated method stub
                return s.length;
            }
        });
        gridView.setOnItemClickListener(new OnItemClickListener()
        {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id)
            {
              Toast.makeText(HomePage.this, position+"", Toast.LENGTH_SHORT).show();
              popupWindow.dismiss();
            }
        });
        //下面设置了popupwindow一显示就获得焦点,activity就 没有 焦点,监听不到事件,只要gridview有显示,不管按什么键  popupwindow都得消失
       
        gridView.setOnKeyListener(new OnKeyListener()
        {
           
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event)
            {
                if(keyCode==KeyEvent.KEYCODE_BACK && event.getAction()==KeyEvent.ACTION_DOWN)
                {
                    popupWindow.dismiss();
                }
                if(keyCode==KeyEvent.KEYCODE_MENU  && event.getAction()==KeyEvent.ACTION_DOWN)
                {
                    popupWindow.dismiss();
                }
                if(keyCode==KeyEvent.KEYCODE_HOME  && event.getAction()==KeyEvent.ACTION_DOWN)
                {
                    popupWindow.dismiss();
                }
                return false;
            }
        });
        //popupWindow的高度要wrap content 不然  显示的gridview  在头部,不会在底部
        popupWindow = new PopupWindow(popview, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, true);
//        popupWindow.setOutsideTouchable(true);
//        //touch  拦截器
//        popupWindow.setTouchInterceptor(new OnTouchListener()
//        {
//           
//            @Override
//            public boolean onTouch(View v, MotionEvent event)
//            {
//                //不管3 7  21 按了外面popupWindow  就消失
//                if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
//
//                    popupWindow.dismiss();
//                }
//              
//                return false;
//            }
//        });
      
    }


//重写activity 的
@Override
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
        //只要popupwindow没有显示,焦点就在activity上,可以监听到按了menu键....
        if(keyCode==KeyEvent.KEYCODE_MENU)
        {
            popupWindow.showAtLocation(parent, Gravity.BOTTOM, 0, 0);
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
//重写activity的  默认是返回true  这里改为false不要系统默认的菜单
   @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        //不要系统的option menu
        return false;
    }


popupwindow.xml   弹出窗口的布局
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

       

        <View
            android:id="@+id/view1"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />
        <GridView
            android:id="@+id/gridView1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:numColumns="4" >
        </GridView>

    </LinearLayout>

item_popup.xml    gridview的item布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
//这里设置match parent没问题,因为它针对的是gridview 设置的    numColumns="4" 的column的宽而不是针对gridview的宽
    android:layout_width="match_parent"  
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:gravity="center">

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="62dp"
        android:layout_height="62dp"
        android:src="@drawable/ic_find" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

</LinearLayout>
分享到:
评论

相关推荐

    PopupWindow

    PopupWindow是Android系统中一个非常重要的UI组件,它允许开发者在屏幕任意位置显示一个浮动的窗口,这个窗口可以是对话框、菜单或者其他自定义视图。在Android应用开发中,PopupWindow常用于创建弹出式菜单、提示...

    android popupwindow 底部灰色背景

    在Android开发中,PopupWindow是一个非常实用的组件,它允许我们创建浮动窗口,可以在Activity的任何位置显示。在实现特定的UI设计时,比如底部弹出菜单或对话框,我们可能会遇到需要添加底部灰色背景的需求。这个...

    PopupWindow之显示顶层对话框代码

    PopupWindow是Android开发中一个非常重要的组件,它允许开发者创建可弹出的窗口,通常用于显示临时信息或者作为上下文菜单。在Android应用设计中,PopupWindow可以为用户提供直观、便捷的交互方式,比如在主界面之上...

    popupwindow实现按钮下方阴影

    在Android开发中,PopupWindow是一种常用的轻量级弹窗组件,用于在屏幕任意位置显示一个浮层视图。本文将详细讲解如何实现标题所描述的功能:“popupwindow弹窗实现点击按钮,下方弹出popwindow,并且只是按钮下方有...

    Android从屏幕底部弹出PopupWindow

    在Android开发中,PopupWindow是一种常用的UI组件,它可以在屏幕上的任意位置显示一个浮动窗口,通常用于实现类似下拉菜单、提示框等效果。在这个场景中,我们要实现的是从屏幕底部弹出的PopupWindow,并带有滑动...

    仿微信右上角弹出PopupWindow

    在Android开发中,`PopupWindow`是一个非常实用的组件,常用于实现各种临时显示的弹出界面,如下拉菜单、浮动提示等。本Demo旨在模仿微信应用中的右上角弹出功能,提供一个类似的用户体验。我们将深入探讨如何创建和...

    Android源码——PopupWindow实现弹出菜单.zip

    在Android开发中,`PopupWindow` 是一个非常重要的组件,常用于实现各种弹出式菜单、下拉选择器等交互效果。本资料包"Android源码——PopupWindow实现弹出菜单.zip"主要聚焦于如何利用`PopupWindow`来创建自定义的弹...

    让popupwindow显示在view的上方并与该view水平居中对齐

    PopupWindow是Android开发中一个非常实用的组件,它允许我们创建一种浮动的窗口,通常用于显示临时信息或者快捷操作菜单。在Android应用设计中,有时我们需要让PopupWindow出现在某个特定View的上方,并与该View水平...

    android自定义通用PopupWindow

    在Android开发中,`PopupWindow` 是一个非常实用的组件,它允许我们创建弹出式窗口,用于显示一些临时信息或者交互操作。本教程将详细讲解如何封装一个通用的`PopupWindow`,以便在项目中复用,降低代码冗余,提高...

    窗帘式 从上往下弹出popupwindow带遮罩

    在Android开发中,PopupWindow是一种常用的轻量级窗口组件,用于在主界面之上弹出一个临时的视图,常用于实现下拉菜单、提示框等效果。本篇将详细讲解如何实现“窗帘式从上往下弹出的PopupWindow带遮罩”的功能。 ...

    安卓popupwindow相关-仿微信popupwindow.zip

    在安卓开发中,PopupWindow是一个非常实用的组件,它能够以弹出窗口的形式展示内容,类似于iOS中的ActionSheet。在本资源"安卓popupwindow相关-仿微信popupwindow.zip"中,开发者提供了一种模仿微信应用内...

    封装PopupWindow(1)

    PopupWindow是Android开发中常用的一种组件,用于在主界面之上显示一个临时的窗口,通常用于实现下拉菜单、提示信息等效果。在这个“封装PopupWindow(1)”中,我们将探讨如何对PopupWindow进行高效且可复用的封装,...

    Android PopupWindow实现右侧、左侧和底部弹出菜单

    在Android开发中,PopupWindow是一个非常实用的组件,它可以用来创建各种形式的浮动窗口,比如在屏幕边缘弹出的菜单。本教程将详细介绍如何利用PopupWindow实现右侧、左侧和底部弹出菜单,以提供丰富的交互体验。 ...

    Android 简单封装一个精美、好用的菜单型PopupWindow

    在Android开发中,PopupWindow是一个非常实用的组件,它可以用于创建弹出式窗口,提供临时性的用户交互。本文将深入探讨如何在Android中简单封装一个精美、易用的菜单型PopupWindow,以满足用户界面的需求。 首先,...

    Android PopupWindow与Activity之间的数据传递.zip

    在Android开发中,PopupWindow和Activity是两个非常重要的组件。PopupWindow通常用于创建浮动窗口,如下拉菜单、提示框等,而Activity则是应用程序的基本单元,承载着用户界面和业务逻辑。两者之间的数据传递是实现...

    Android 点击listview弹出popupwindow弹出框

    本篇将详细介绍如何在用户点击`ListView`时弹出一个包含`PopupWindow`的弹出框,并且这个`PopupWindow`内还具有`ListView`的右滑删除功能。 首先,我们需要创建`PopupWindow`。`PopupWindow`的构造函数通常接收三个...

Global site tag (gtag.js) - Google Analytics