android使用PopupWindow实现页面点击顶部弹出下拉菜单

内容摘要
实现此功能没有太多的技术难点,主要通过PopupWindow方法,同时更进一步加深了PopupWindow的使用,实现点击弹出一个自定义的view,view里面可以自由设计,比较常用的可以放一个listvi
文章正文

实现此功能没有太多的技术难点,主要通过PopupWindow方法,同时更进一步加深了PopupWindow的使用,实现点击弹出一个自定义的view,view里面可以自由设计,比较常用的可以放一个listview。

demo中我只是一个点击展示,简单的使用了fade in out的动画效果,也没有精美的图片资源,看着也丑,不过这么短的时间,让你掌握一个很好用的技术,可以自己扩展,不很好么?

废话不说了,直接上代码:

MainActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
public class MainActivity extends Activity implements OnClickListener {
  private PopupWindow popupwindow;
  private Button button;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    button = (Button) findViewById(R.id.button1);
    button.setOnClickListener(this);
  }
  @Override
  public void onClick(View v) {
    switch (v.getId()) {
    case R.id.button1:
      if (popupwindow != null&&popupwindow.isShowing()) {
        popupwindow.dismiss();
        return;
      } else {
        initmPopupWindowView();
        popupwindow.showAsDropDown(v, 0, 5);
      }
      break;
    default:
      break;
    }
  }
  public void initmPopupWindowView() {
    // // 获取自定义布局文件pop.xml的视图
    View customView = getLayoutInflater().inflate(R.layout.popview_item,
        null, false);
    // 创建PopupWindow实例,200,150分别是宽度和高度
    popupwindow = new PopupWindow(customView, 250, 280);
    // 设置动画效果 [R.style.AnimationFade 是自己事先定义好的]
    popupwindow.setAnimationStyle(R.style.AnimationFade);
    // 自定义view添加触摸事件
    customView.setOnTouchListener(new OnTouchListener() {
      @Override
      public boolean onTouch(View v, MotionEvent event) {
        if (popupwindow != null && popupwindow.isShowing()) {
          popupwindow.dismiss();
          popupwindow = null;
        }
        return false;
      }
    });
    /** 在这里可以实现自定义视图的功能 */
    Button btton2 = (Button) customView.findViewById(R.id.button2);
    Button btton3 = (Button) customView.findViewById(R.id.button3);
    Button btton4 = (Button) customView.findViewById(R.id.button4);
    btton2.setOnClickListener(this);
    btton3.setOnClickListener(this);
    btton4.setOnClickListener(this);
  }
}

activity_main.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<RelativeLayout 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:background="#000000"
  tools:context=".MainActivity" >
  <Button
    android:id="@+id/button1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:gravity="center"
    android:background="#C0C0C0"
    android:text="点击下拉列表" />
</RelativeLayout>

自定义view的xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<RelativeLayout 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:background="#C0C0C0" >
  <Button
    android:id="@+id/button2"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:paddingRight="70dp"
    android:text="viviens" />
  <Button
    android:id="@+id/button3"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/button2"
    android:paddingRight="70dp"
    android:text="mryang" />
  <Button
    android:id="@+id/button4"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/button3"
    android:paddingRight="70dp"
    android:text="张晓达" />
</RelativeLayout>

动画效果:

inputodown.xml 进入屏幕

1
2
3
4
5
6
7
<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
  <translate
    android:duration="500"
    android:fromYDelta="-100%"
    android:toYDelta="0" />
</set>

outdowntoup.xml

1
2
3
4
5
6
7
<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
  <translate
    android:duration="500"
    android:fromYDelta="0"
    android:toYDelta="-100%" />
</set>

styles.xml

1
2
3
4
5
<style name="AnimationFade">
  <!-- PopupWindow左右弹出的效果 -->
  <item name="android:windowEnterAnimation">@anim/inuptodown</item>
  <item name="android:windowExitAnimation">@anim/outdowntoup</item>
</style>

实现效果:


以上所述就是本文对android使用PopupWindow实现页面点击顶部弹出下拉菜单的全部内容,希望大家喜欢。


代码注释

作者:喵哥笔记

IDC笔记

学的不仅是技术,更是梦想!