Android自定义PopupWindow简单小例子

最近没事做就写了一下PopupWindow,希望对有些人有点帮助。

照常先看一下完成后的结果(界面比较难看就不要吐槽了)

点击地理位置然后弹出的PopupWindow,数据我写死了但是可以根据你们的需求自己改,或者通过网络获取数据。我是通过listView进行展示的你们也可以改成表格布局,具体的实现代码如下:

PopupWindow的弹出框的整体布局(listView)fragment_popup:

<?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">

  <ListView
    android:id="@+id/pop_path"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
  </ListView>

</LinearLayout>

listview要加载的item:pop_list_adapter.xml

<?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">
  <TextView
    android:id="@+id/item_content"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="18dp"/>
</LinearLayout>

listview的适配器:PopAdapter

public class PopAdapter extends BaseAdapter {

  private List<String> list;
  private Context context;

  public PopAdapter(List<String> list, Context context) {
    this.list = list;
    this.context = context;
  }

  @Override
  public int getCount() {
    return list.size();
  }

  @Override
  public Object getItem(int position) {
    return position;
  }

  @Override
  public long getItemId(int position) {
    return position;
  }

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder viewHolder;
    if (convertView == null) {
      viewHolder = new ViewHolder();
      convertView = LayoutInflater.from(context).inflate(R.layout.pop_list_adapter, null);
      viewHolder.item_content = (TextView) convertView.findViewById(R.id.item_content);
      convertView.setTag(viewHolder);
    } else {
      viewHolder = (ViewHolder) convertView.getTag();
    }
    viewHolder.item_content.setText(list.get(position));

    return convertView;
  }

  private class ViewHolder {
    private TextView item_content;
  }
}

写一个MyPopupWindow类继承PopupWindow:

public class MyPopuWindow extends PopupWindow {
  private View contentView;
  private ListView lv_pop;
  private List<String> paths;
  private Context context;

  public MyPopuWindow(final Activity context) {
    this.context = context;

    //获得 LayoutInflater 的实例
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    contentView = inflater.inflate(R.layout.fragment_popup, null);

    //获取屏幕的宽高
    int h = context.getWindowManager().getDefaultDisplay().getHeight();
    int w = context.getWindowManager().getDefaultDisplay().getWidth();
    this.setContentView(contentView);
    // 设置SelectPicPopupWindow弹出窗体的宽
    this.setWidth(LayoutParams.MATCH_PARENT);
    // 设置SelectPicPopupWindow弹出窗体的高
    this.setHeight(LayoutParams.WRAP_CONTENT);
    // 设置SelectPicPopupWindow弹出窗体可点击
    this.setFocusable(true);
    this.setOutsideTouchable(true);
    // 刷新状态
    this.update();
    // 实例化一个ColorDrawable颜色为半透明
    ColorDrawable dw = new ColorDrawable(0000000000);
    // 点back键和其他地方使其消失,设置了这个才能触发OnDismisslistener ,设置其他控件变化等操作
    this.setBackgroundDrawable(dw);
    // 设置SelectPicPopupWindow弹出窗体动画效果
    this.setAnimationStyle(R.style.AnimationPreview);
    initData();
  }

  private void initData() {
    paths = new ArrayList<>();
    paths.add("北京");
    paths.add("上海");
    paths.add("广州");
    paths.add("天津");
    paths.add("大连");
    paths.add("长春");
    paths.add("济南");
    paths.add("青岛");
    paths.add("无锡");
    paths.add("郑州");
    paths.add("宁波");
    paths.add("厦门");
    lv_pop = (ListView) contentView.findViewById(R.id.pop_path);
    lv_pop.setAdapter(new PopAdapter(paths, context));
    lv_pop.setOnItemClickListener(new AdapterView.OnItemClickListener() {
      @Override
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Toast.makeText(context, paths.get(position), Toast.LENGTH_SHORT).show();
        showPopupWindow(view);
      }
    });
  }

  /**
   * 显示popupWindow
   *
   * @param parent
   */
  public void showPopupWindow(View parent) {
    if (!this.isShowing()) {
      // 以下拉方式显示popupwindow
      this.showAsDropDown(parent, parent.getLayoutParams().width / 2, 18);
    } else {
      this.dismiss();
    }
  }

}

接下来就是调用PopupWindow显示了。actionPath:是你的组件也就是我的地理位置

myPopuWindow= new MyPopuWindow(getActivity());
myPopuWindow.showPopupWindow(actionPath);

好了大概的一个代码就是这样了希望对你们有用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android自定义PopupWindow小案例

    PopupWindow是我们开发中的常客之一,使用起来也比较简单方便.  写了个最简单地自定义PopupWindow,记录下来,方便以后使用时直接在上面改动就可以. /** * @param * @author ldm * @description 自定义PopupWindow * @time 2016/9/29 15:26 */ public class CustomPopup extends PopupWindow { //上下文 private Context mContext; // P

  • Android实现可使用自定义透明Dialog样式的Activity完整实例

    本文实例讲述了Android实现可使用自定义透明Dialog样式的Activity.分享给大家供大家参考,具体如下: 有时你需要一个对话框,但同时对话框中的内容有更多控制和能控制其生命周期,这时你可以使用带有Dialog样式的Activity来应用你的项目中,想使Activity有对话框那样效果可以在Androidmanifest中添加 Android:style/Theme.Dialog 的主题特性 例如这样: <activity android:name="MyDialogActivi

  • Android 解决dialog弹出时无法捕捉Activity的back事件问题

    Android 如何解决dialog弹出时无法捕捉Activity的back事件 在一些情况下,我们需要捕捉back键事件,然后在捕捉到的事件里写入我们需要进行的处理,通常可以采用下面三种办法捕捉到back事件: 1)重写onKeyDown或者onKeyUp方法 2)重写onBackPressed方法 3)重写dispatchKeyEvent方法 这三种办法有什么区别在这里不进行阐述,有兴趣的朋友可以查阅相关资料. 然而在有dialog弹出时,想捕捉back键的事件的话,上述三种办法都无法实现.

  • Android开发:微信授权登录与微信分享完全解析

    前言 在移动互联网浪潮中,联网APP已经把单机拍死在沙滩上,很多公司都希望自家应用能够有一套帐号系统,可是许多用户却并不一定买账:我凭啥注册你家应用的帐号?微博,微信,QQ几乎成了每个人手机中的必装应用,于是微信,微博,QQ说了:来来来,你们都可以用我家的帐号登录你家应用,只要你遵循OAuth2.0协议标准就行.于是第三方社交帐号登陆成为了许多新兴应用的选择,由于腾讯官方微信开放平台的在线文档相对最新的SDK有些出入,并且登录相关的文档结构次序有些紊乱,今天就把我的一些经验记录在此,对微信开放平

  • Android解决dialog弹出时无法捕捉Activity的back事件的方法

    本文实例讲述了Android解决dialog弹出时无法捕捉Activity的back事件的方法.分享给大家供大家参考.具体分析如下: 在一些情况下,我们需要捕捉back键事件,然后在捕捉到的事件里写入我们需要进行的处理,通常可以采用下面三种办法捕捉到back事件: 1)重写onKeyDown或者onKeyUp方法 2)重写onBackPressed方法 3)重写dispatchKeyEvent方法 这三种办法有什么区别在这里不进行阐述,有兴趣的朋友可以查阅相关资料. 然而在有dialog弹出时,

  • android自定义popupwindow仿微信右上角弹出菜单效果

    微信右上角的操作菜单看起来很好用,就照着仿了一下,不过是旧版微信的,手里刚好有一些旧版微信的资源图标,给大家分享一下. 不知道微信是用什么实现的,我使用popupwindow来实现,主要分为几块内容: 1.窗口布局文件:popwin_share.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com

  • Android使用Dialog风格弹出框的Activity

    在Android中经常会遇到需要使用Dialog风格弹出框的activity,首先我们可能会首先想到的是在XML布局文件中设置android:layout_height="wrap_content"属性,让activity的高度自适应,显然这还不行,我们还需要为其DialogActivity设置自定义一个样式 <style name="dialogstyle"> <!--设置dialog的背景--> <item name="a

  • Android自定义仿微信PopupWindow效果

    给大家分享一个高仿微信的PopupWindow.就是微信的扫一扫那个功能窗口.下面有应用运行效果图.更加直观的展示了Demo的效果.源代码是通过两种方法实现的.大家可以下载源代码研究研究.集成到自己的项目中也是很方便的.希望对大家有用.先看一下 Demo运行效果 本Demo是高仿的微信以前的版本.并不是最新版本.如果想改成最新版本的可稍做改动就ok了 第一种方式 初始化组件 private void initView(){ //实例化标题栏按钮并设置监听 titleBtn = (ImageBut

  • Android自定义PopupWindow简单小例子

    最近没事做就写了一下PopupWindow,希望对有些人有点帮助. 照常先看一下完成后的结果(界面比较难看就不要吐槽了) 点击地理位置然后弹出的PopupWindow,数据我写死了但是可以根据你们的需求自己改,或者通过网络获取数据.我是通过listView进行展示的你们也可以改成表格布局,具体的实现代码如下: PopupWindow的弹出框的整体布局(listView)fragment_popup: <?xml version="1.0" encoding="utf-8

  • Android自定义PopupWindow实现炫酷的IOS对话框效果

    前言: 最近在使用IOS系统的过程中发现IOS底部弹出框甚是漂亮,大气,上档次,于是乎就想啊能不能在Android中实现类似的对话框呢?你说,这不是废话吗,除了一些极少数的系统级的不能模仿外(版权)还有啥不能依瓢画葫芦的呢,所以啊,这篇文章将介绍如何在Android中实现高仿IOS对话框效果,先上图,给大家养养眼: 大家在看到上面的对话框时有没有想到简单的实现思路呢?我这里给出的思路是我们可以自定义一个PopupWindow,然后设置我们的布局.这里的布局很有技巧哦,那就是对话框中间的透明隔断区

  • Android 自定义ContentProvider简单实例

    Android 自定义ContentProvider简单实例 Android允许我们定义自己的的ContentProvider对象来共享数据,练练手,简单来实现一下. 要使用ContentProvider来操作数据,必须要有保存数据的场所.可以使用文件或SQLite数据库的方式来保存数据,通常使用SQLite数据库. 1,创建一个数据库帮助类,归根结底都是它在操作数据库.代码如下: package com.njue; import android.content.Context; import

  • Android自定义dialog简单实现方法

    本文实例讲述了Android自定义dialog简单实现方法.分享给大家供大家参考,具体如下: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.function_music); // 实例化新的窗口 Window w = getWindow(); // 获取默认显示数据 Display display

  • Android自定义popupwindow实例代码

    先来看看效果图: 一.布局  <?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="wrap_content&qu

  • Android自定义PopupWindow仿点击弹出分享功能

    本文实例自定义PopupWindow,点击弹出PopupWindow,背景变暗,仿点击弹出分享功能,供大家参考,具体内容如下 注:参照大神代码写的 自定义代码 package com.duanlian.popupwindowdemo; import android.app.Activity; import android.content.Context; import android.graphics.drawable.ColorDrawable; import android.view.Lay

  • android 定时启动\取消小例子

    复制代码 代码如下: Intent intent = new Intent("cn.pocketdigi.update.alarm"); intent.setClass(this, AlarmReceiver.class); PendingIntent pi=PendingIntent.getBroadcast(this, 0, intent,0); //设置一个PendingIntent对象,发送广播 AlarmManager am=(AlarmManager)getSystemSe

  • 实现jsp验证码的简单小例子

    复制代码 代码如下: <%@ page language="java" pageEncoding="gbk"%><%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %><%!Color getRandColor(int fc,int bc){//给定范围

随机推荐