现在的位置: 首页 > 综合 > 正文

菜鸟笔记4-简单popupWindow实现

2017年02月24日 ⁄ 综合 ⁄ 共 3030字 ⁄ 字号 评论关闭
先来看下效果吧,点击右边按钮后出现一个弹出菜单,点击菜单中文字可以响应点击事件。
下面就来实现这个效果。
首先是布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@color/popmenuGray"
    android:orientation="vertical"
    android:gravity="center"
    android:padding="20dp">

    <TextView
        android:id="@+id/course_popup_item1"
        android:gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/course_popmenu1"
        android:textColor="#ffffff"
        android:drawablePadding="10dp"
        android:drawableStart="@drawable/popmenu1"
        android:drawableLeft="@drawable/popmenu1"/>

    <TextView
        android:id="@+id/course_popup_item2"
        android:gravity="center"
        android:layout_marginTop="15dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/course_popmenu2"
        android:textColor="#ffffff"
        android:drawablePadding="10dp"
        android:drawableStart="@drawable/popmenu2"
        android:drawableLeft="@drawable/popmenu2"/>
</LinearLayout>

界面布局也比较简单,这里就省略了。

下面是效果的实现:
</pre><pre name="code" class="java">private void showPopupWindow() {

        if(popupWindow != null && popupWindow.isShowing()){
            popupWindow.dismiss();
            return ;
        }

        if(popupWindow == null) {
            View view =  ((LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE))
                    .inflate(R.layout.course_popup_window, null);
            popupWindow = new PopupWindow(view, ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT,true);

            TextView item1 = (TextView) view.findViewById(R.id.course_popup_item1);
            TextView item2 = (TextView) view.findViewById(R.id.course_popup_item2);

            item1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Toast.makeText(CourseActivity.this,"已定制",Toast.LENGTH_SHORT).show();
                }
            });

            item2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Toast.makeText(CourseActivity.this,"已完成",Toast.LENGTH_SHORT).show();
                }
            });

        }
        popupWindow.setBackgroundDrawable(new BitmapDrawable());
        popupWindow.setOutsideTouchable(true);
        popupWindow.showAsDropDown(mBtnAdd,-120,10);//设置popupWindow出现位置
        popupWindow.setFocusable(true);
        popupWindow.update();


    }

代码很简单,不过有些地方要注意一下:

1.
 popupWindow.setBackgroundDrawable(new BitmapDrawable());
 popupWindow.setOutsideTouchable(true);

这两句是用来使得点击其他地方让popupWindow消失的。

我刚开始的时候代码是这样的
popupWindow.showAsDropDown(mBtnAdd,-120,10);//设置popupWindow出现位置
popupWindow.setFocusable(true);
<pre name="code" class="java">popupWindow.setBackgroundDrawable(new BitmapDrawable());
popupWindow.setOutsideTouchable(true);

popupWindow.update();


点击按钮之后popupWindow是能出来,不过点击其他地方不能让他消失,而且所有的点击事件包括返回按钮事件都没用了,在网上找了半天也没有结果,最后无意中把这两句话放到前面就行了(为什么?????疑问

2.
TextView item1 = (TextView) view.findViewById(R.id.course_popup_item1);
TextView item2 = (TextView) view.findViewById(R.id.course_popup_item2);

注意是

(TextView) view.findViewById(R.id.course_popup_item1);

而不是

(TextView) findViewById(R.id.course_popup_item1);

刚开始我用的是下面一个,进去之后一点击就崩溃,后来才知道TextView是在popWindow中,要找到这个控件要在popWindow中找,所以要用View.fnidViewById,而不能直接findViewById

参考资料  www.chinambs.com/bbs/thread-1009-1-1.html

有什么不对的地方欢迎大家指出来。

抱歉!评论已关闭.